Search in sources :

Example 1 with Tuple2

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

the class DatabaseIntegrationTest method olapWithoutPartitionOrOrder.

@Test
void olapWithoutPartitionOrOrder() {
    assumeFalse(dialect.requiresOrderByInRowNumber(), dialect.getClass().getSimpleName() + " does not support row_number() without ORDER BY.");
    Database database = testDatabase(dataSource, dialect);
    Tuple2<Long, Long> inserted = insertSalespeople(database, 5);
    List<Tuple2<Long, Integer>> result = database.from(SalespersonRow.class).select(SalespersonRow::salespersonId).comma(Olap.rowNumber()).where(SalespersonRow::salespersonId).isBetween(inserted.item1()).and(inserted.item2()).orderBy(SalespersonRow::salespersonId).list();
    assertThat(result, hasSize(5));
    assertThat(result.get(0), is(Tuple.of(inserted.item1(), 1)));
    assertThat(result.get(4), is(Tuple.of(inserted.item2(), 5)));
}
Also used : Tuple2(com.cadenzauk.core.tuple.Tuple2) TestDatabase.testDatabase(com.cadenzauk.siesta.model.TestDatabase.testDatabase) SalespersonRow(com.cadenzauk.siesta.model.SalespersonRow) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 2 with Tuple2

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

the class DatabaseIntegrationTest method leftJoinOfMissingIsNull.

@Test
void leftJoinOfMissingIsNull() {
    Database database = testDatabase(dataSource, dialect);
    long manufacturer1 = newId();
    long manufacturer2 = newId();
    ManufacturerRow twoParts = ManufacturerRow.newBuilder().manufacturerId(manufacturer1).name(Optional.of("Has a Part")).build();
    ManufacturerRow noParts = ManufacturerRow.newBuilder().manufacturerId(manufacturer2).name(Optional.of("Has No Parts")).build();
    WidgetRow aWidget1 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer1).name("Name 1").build();
    database.insert(noParts, twoParts);
    database.insert(aWidget1);
    List<Tuple2<ManufacturerRow, WidgetRow>> result = database.from(ManufacturerRow.class, "m").leftJoin(WidgetRow.class, "w").on(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId).where(ManufacturerRow::manufacturerId).isIn(manufacturer1, manufacturer2).orderBy(ManufacturerRow::manufacturerId).list();
    assertThat(result, hasSize(2));
    assertThat(result.get(0).item1().name(), is(Optional.of("Has a Part")));
    assertThat(result.get(0).item2().name(), is("Name 1"));
    assertThat(result.get(1).item1().name(), is(Optional.of("Has No Parts")));
    assertThat(result.get(1).item2(), nullValue());
}
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)

Example 3 with Tuple2

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

the class DatabaseIntegrationTest method selectRow.

@Test
void selectRow() {
    Database database = testDatabase(dataSource, dialect);
    long manufacturerId = newId();
    ManufacturerRow aManufacturer = ManufacturerRow.newBuilder().manufacturerId(manufacturerId).name(Optional.of("Acclaimed Widgets")).build();
    WidgetRow aWidget1 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturerId).name("Acclaimed 1").build();
    WidgetRow aWidget2 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturerId).name("Acclaimed 2").build();
    database.insert(aManufacturer);
    database.insert(aWidget1, aWidget2);
    List<WidgetRow> acclaimedWidgets1 = database.from(ManufacturerRow.class, "m").join(WidgetRow.class, "w").on(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId).select(WidgetRow.class).where(ManufacturerRow::name).isEqualTo("Acclaimed Widgets").orderBy(WidgetRow::name, DESC).list();
    List<Tuple2<String, WidgetRow>> acclaimedWidgets2 = database.from(ManufacturerRow.class, "m").join(WidgetRow.class, "w").on(WidgetRow::manufacturerId).isEqualTo(ManufacturerRow::manufacturerId).select(WidgetRow::name, "name").comma(WidgetRow.class).where(ManufacturerRow::name).isEqualTo("Acclaimed Widgets").orderBy(WidgetRow::name, Order.ASC).list();
    assertThat(acclaimedWidgets1, hasSize(2));
    assertThat(acclaimedWidgets1.get(0).name(), is("Acclaimed 2"));
    assertThat(acclaimedWidgets1.get(1).name(), is("Acclaimed 1"));
    assertThat(acclaimedWidgets2, hasSize(2));
    assertThat(acclaimedWidgets2.get(0).item1(), is("Acclaimed 1"));
    assertThat(acclaimedWidgets2.get(1).item1(), is("Acclaimed 2"));
    assertThat(acclaimedWidgets2.get(0).item2().name(), is("Acclaimed 1"));
    assertThat(acclaimedWidgets2.get(1).item2().name(), is("Acclaimed 2"));
}
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)

Example 4 with Tuple2

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

the class DatabaseIntegrationTest method selectFromDatabaseTwoTables.

@Test
void selectFromDatabaseTwoTables() {
    Database database = testDatabase(dataSource, dialect);
    long manufacturerId = newId();
    ManufacturerRow aManufacturer = ManufacturerRow.newBuilder().manufacturerId(manufacturerId).name(Optional.of("Makers")).build();
    WidgetRow aWidget = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturerId).name("Dodacky").description(Optional.of("Thingamibob")).build();
    database.insert(aManufacturer);
    database.insert(aWidget);
    Alias<WidgetRow> w = database.table(WidgetRow.class).as("w");
    Alias<ManufacturerRow> m = database.table(ManufacturerRow.class).as("m");
    Optional<WidgetRow> theSame = database.from(w).join(m).on(m, ManufacturerRow::manufacturerId).isEqualTo(w, WidgetRow::manufacturerId).where(w, WidgetRow::name).isEqualTo("Dodacky").and(w, WidgetRow::widgetId).isEqualTo(aWidget.widgetId()).optional().map(Tuple2::item1);
    assertThat(theSame, is(Optional.of(aWidget)));
}
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)

Example 5 with Tuple2

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

the class SiestaExample method selectIntoObject.

@Test
void selectIntoObject() {
    Database database = Database.newBuilder().defaultSchema("SIESTA").defaultSqlExecutor(JdbcSqlExecutor.of(dataSource)).build();
    database.insert(new Manufacturer(2006L, "Spacely Space Sprockets, Inc"), new Manufacturer(2007L, "Cogswell's Cogs"), new Manufacturer(2008L, "Orbit City Gears"));
    database.insert(new Widget(1006L, "Cog", 2006L, Optional.of("Spacely Sprocket")), new Widget(1007L, "Cog", 2007L, Optional.of("Cogswell Cog")), new Widget(1008L, "Cog", 2007L, Optional.of("Cogswell Sprocket")));
    List<Tuple2<String, Integer>> partCountsBySupplier = database.from(Manufacturer.class, "m").leftJoin(Widget.class, "w").on(Widget::manufacturerId).isEqualTo(Manufacturer::manufacturerId).select(Manufacturer::name).comma(countDistinct(Widget::widgetId)).where(Manufacturer::manufacturerId).isIn(2006L, 2007L, 2008L).groupBy(Manufacturer::manufacturerId).orderBy(Manufacturer::manufacturerId).list();
    List<ManufacturerSummary> manufacturerSummaries = database.from(Manufacturer.class, "m").leftJoin(Widget.class, "w").on(Widget::manufacturerId).isEqualTo(Manufacturer::manufacturerId).selectInto(ManufacturerSummary.class).with(Manufacturer::name).as(ManufacturerSummary::name).with(countDistinct(Widget::widgetId)).as(ManufacturerSummary::numberOfPartsSupplied).where(Manufacturer::manufacturerId).isIn(2006L, 2007L, 2008L).groupBy(Manufacturer::manufacturerId).orderBy(Manufacturer::manufacturerId).list();
    List<ManufacturerSummary> nonSuppliers = database.from(Manufacturer.class, "m").leftJoin(Widget.class, "w").on(Widget::manufacturerId).isEqualTo(Manufacturer::manufacturerId).selectInto(ManufacturerSummary.class).with(Manufacturer::name).as(ManufacturerSummary::name).with(countDistinct(Widget::widgetId)).as(ManufacturerSummary::numberOfPartsSupplied).where(Manufacturer::manufacturerId).isIn(2006L, 2007L, 2008L).groupBy(Manufacturer::manufacturerId).having(countDistinct(Widget::widgetId)).isEqualTo(0).orderBy(Manufacturer::manufacturerId).list();
    try (CompositeAutoCloseable autoCloseable = new CompositeAutoCloseable()) {
        database.from(Manufacturer.class).select(Manufacturer::name).where(Manufacturer::manufacturerId).isEqualTo(1L).stream(autoCloseable).forEach(System.out::println);
    }
    assertThat(partCountsBySupplier, hasSize(3));
    assertThat(partCountsBySupplier.get(0).item1(), is("Spacely Space Sprockets, Inc"));
    assertThat(partCountsBySupplier.get(1).item1(), is("Cogswell's Cogs"));
    assertThat(partCountsBySupplier.get(2).item1(), is("Orbit City Gears"));
    assertThat(partCountsBySupplier.get(0).item2(), is(1));
    assertThat(partCountsBySupplier.get(1).item2(), is(2));
    assertThat(partCountsBySupplier.get(2).item2(), is(0));
    assertThat(manufacturerSummaries, hasSize(3));
    assertThat(manufacturerSummaries.get(0).name(), is("Spacely Space Sprockets, Inc"));
    assertThat(manufacturerSummaries.get(1).name(), is("Cogswell's Cogs"));
    assertThat(manufacturerSummaries.get(2).name(), is("Orbit City Gears"));
    assertThat(manufacturerSummaries.get(0).numberOfPartsSupplied(), is(1));
    assertThat(manufacturerSummaries.get(1).numberOfPartsSupplied(), is(2));
    assertThat(manufacturerSummaries.get(2).numberOfPartsSupplied(), is(0));
    assertThat(nonSuppliers, hasSize(1));
    assertThat(nonSuppliers.get(0).name(), is("Orbit City Gears"));
}
Also used : CompositeAutoCloseable(com.cadenzauk.core.lang.CompositeAutoCloseable) Tuple2(com.cadenzauk.core.tuple.Tuple2) Database(com.cadenzauk.siesta.Database) Test(org.junit.jupiter.api.Test) IntegrationTest(com.cadenzauk.siesta.IntegrationTest)

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