Search in sources :

Example 1 with Tuple3

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

the class DatabaseIntegrationTest method countAndCountDistinct.

@Test
void countAndCountDistinct() {
    Database database = testDatabase(dataSource, dialect);
    long manufacturer1 = newId();
    long manufacturer2 = newId();
    WidgetRow aWidget1 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer1).name("Gizmo").build();
    WidgetRow aWidget2 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer1).name("Gizmo").build();
    WidgetRow aWidget3 = WidgetRow.newBuilder().widgetId(newId()).manufacturerId(manufacturer2).name("Gizmo 2").build();
    database.insert(aWidget1, aWidget2, aWidget3);
    List<Tuple3<Long, Integer, Integer>> result = database.from(WidgetRow.class).select(WidgetRow::manufacturerId).comma(countDistinct(WidgetRow::name)).comma(count()).where(WidgetRow::widgetId).isIn(aWidget1.widgetId(), aWidget2.widgetId(), aWidget3.widgetId()).groupBy(WidgetRow::manufacturerId).orderBy(WidgetRow::manufacturerId, Order.ASC).list();
    assertThat(result.get(0).item1(), is(manufacturer1));
    assertThat(result.get(0).item2(), is(1));
    assertThat(result.get(0).item3(), is(2));
    assertThat(result.get(1).item1(), is(manufacturer2));
    assertThat(result.get(1).item2(), is(1));
    assertThat(result.get(1).item3(), is(1));
}
Also used : WidgetRow(com.cadenzauk.siesta.model.WidgetRow) Tuple3(com.cadenzauk.core.tuple.Tuple3) TestDatabase.testDatabase(com.cadenzauk.siesta.model.TestDatabase.testDatabase) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 2 with Tuple3

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

the class DatabaseIntegrationTest method olapWithPartitionAndOrder.

@Test
void olapWithPartitionAndOrder() {
    assumeTrue(dialect.supportsPartitionByInOlap() && dialect.supportsOrderByInOlap(), dialect.getClass().getSimpleName() + " does not support PARTITION BY/ORDER BY in OLAP functions.");
    Database database = testDatabase(dataSource, dialect);
    Tuple2<Long, Long> inserted = insertSalespeople(database, 5);
    List<Tuple3<Long, Integer, Long>> result = database.from(SalespersonRow.class).select(SalespersonRow::salespersonId).comma(Olap.rowNumber().partitionBy(SalespersonRow::salespersonId).orderBy(SalespersonRow::salespersonId, DESC).then(SalespersonRow::surname, ASC)).comma(Olap.sum(SalespersonRow::salespersonId).partitionBy(SalespersonRow::salespersonId).orderBy(SalespersonRow::salespersonId, DESC)).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, inserted.item1())));
    assertThat(result.get(4), is(Tuple.of(inserted.item2(), 1, inserted.item2())));
}
Also used : Tuple3(com.cadenzauk.core.tuple.Tuple3) 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 3 with Tuple3

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

the class DatabaseIntegrationTest method olapWithPartition.

@Test
void olapWithPartition() {
    assumeTrue(dialect.supportsPartitionByInOlap(), dialect.getClass().getSimpleName() + " does not support PARTITION BY in OLAP functions.");
    Database database = testDatabase(dataSource, dialect);
    Tuple2<Long, Long> inserted = insertSalespeople(database, 5);
    TypedExpression<Integer> rowNumber = dialect.requiresOrderByInRowNumber() ? Olap.rowNumber().partitionBy(column(SalespersonRow::salespersonId)).orderBy(SalespersonRow::salespersonId, ASC) : Olap.rowNumber().partitionBy(column(SalespersonRow::salespersonId));
    List<Tuple3<Long, Integer, Long>> result = database.from(SalespersonRow.class).select(SalespersonRow::salespersonId).comma(rowNumber).comma(Olap.sum(SalespersonRow::salespersonId).partitionBy(SalespersonRow::salespersonId).then(SalespersonRow::firstName)).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, inserted.item1())));
    assertThat(result.get(4), is(Tuple.of(inserted.item2(), 1, inserted.item2())));
}
Also used : Tuple3(com.cadenzauk.core.tuple.Tuple3) 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 4 with Tuple3

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

the class SiestaExample method insertSomeGizmosAndReadThemBack.

@Test
void insertSomeGizmosAndReadThemBack() {
    Database database = Database.newBuilder().defaultSchema("SIESTA").defaultSqlExecutor(JdbcSqlExecutor.of(dataSource)).build();
    ZonedDateTime start = ZonedDateTime.now(ZoneOffset.UTC);
    database.insert(new Manufacturer(2004L, "Gizmos Inc"), new Manufacturer(2005L, "Acme Inc"));
    database.insert(new Widget(1003L, "Gizmo", 2004L, Optional.empty()), new Widget(1004L, "Gizmo", 2005L, Optional.of("Acme Gizmo")), new Widget(1005L, "Gizmo", 2005L, Optional.of("Acme Gizmo Mk II")));
    ZonedDateTime end = ZonedDateTime.now(ZoneOffset.UTC);
    List<Tuple3<String, String, ZonedDateTime>> makersOfGizmos = database.from(Widget.class, "w").join(Manufacturer.class, "m").on(Manufacturer::manufacturerId).isEqualTo(Widget::manufacturerId).select(Manufacturer::name).comma(Widget::description).comma(Manufacturer::insertionTs).where(Widget::name).isEqualTo("Gizmo").orderBy(Widget::widgetId).list();
    assertThat(makersOfGizmos, hasSize(3));
    assertThat(makersOfGizmos.get(0).item1(), is("Gizmos Inc"));
    assertThat(makersOfGizmos.get(1).item1(), is("Acme Inc"));
    assertThat(makersOfGizmos.get(2).item1(), is("Acme Inc"));
    assertThat(makersOfGizmos.get(0).item3().isBefore(start), is(false));
    assertThat(makersOfGizmos.get(0).item3().isAfter(end), is(false));
}
Also used : ZonedDateTime(java.time.ZonedDateTime) Tuple3(com.cadenzauk.core.tuple.Tuple3) Database(com.cadenzauk.siesta.Database) Test(org.junit.jupiter.api.Test) IntegrationTest(com.cadenzauk.siesta.IntegrationTest)

Example 5 with Tuple3

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

the class DatabaseIntegrationTest method olapWithOrderBy.

@Test
void olapWithOrderBy() {
    assumeTrue(dialect.supportsOrderByInOlap(), dialect.getClass().getSimpleName() + " does not support row_number() with ORDER BY.");
    Database database = testDatabase(dataSource, dialect);
    Tuple2<Long, Long> inserted = insertSalespeople(database, 5);
    List<Tuple3<Long, Integer, Long>> result = database.from(SalespersonRow.class).select(SalespersonRow::salespersonId).comma(Olap.rowNumber().orderBy(SalespersonRow::salespersonId, DESC)).comma(Olap.sum(SalespersonRow::salespersonId).orderBy(SalespersonRow::salespersonId, ASC)).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(), 5, inserted.item1())));
    assertThat(result.get(4), is(Tuple.of(inserted.item2(), 1, LongStream.range(inserted.item1(), inserted.item2() + 1).reduce((x, y) -> x + y).orElse(0))));
}
Also used : Tuple3(com.cadenzauk.core.tuple.Tuple3) 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)

Aggregations

Tuple3 (com.cadenzauk.core.tuple.Tuple3)6 Test (org.junit.jupiter.api.Test)6 TestDatabase.testDatabase (com.cadenzauk.siesta.model.TestDatabase.testDatabase)5 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)5 SalespersonRow (com.cadenzauk.siesta.model.SalespersonRow)3 WidgetRow (com.cadenzauk.siesta.model.WidgetRow)2 Database (com.cadenzauk.siesta.Database)1 IntegrationTest (com.cadenzauk.siesta.IntegrationTest)1 ZonedDateTime (java.time.ZonedDateTime)1