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));
}
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())));
}
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())));
}
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));
}
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))));
}
Aggregations