@Test public void testCache() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofDays(1), false, false, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryResult result = getQueryService().executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); assertEquals(1, result.getResult().size()); assertEquals(1, result.getResult().get(0).size()); assertEquals(SCALE_FACTOR, ((Number) result.getResult().get(0).get(0)).intValue()); }
@Test public void testIncremental() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofDays(1), true, false, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryResult result = getQueryService().executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); assertEquals(1, result.getResult().size()); assertEquals(1, result.getResult().get(0).size()); assertEquals(SCALE_FACTOR, ((Number) result.getResult().get(0).get(0)).intValue()); }
@Test(invocationCount = 5) public void testIncrementalRealtime() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofDays(1), true, true, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryResult result = getQueryService().executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); assertEquals(1, result.getResult().size()); assertEquals(1, result.getResult().get(0).size()); assertEquals(SCALE_FACTOR, ((Number) result.getResult().get(0).get(0)).intValue()); }
@Test public void testCacheExpiration() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofSeconds(1), false, false, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryExecutorService queryService = getQueryService(); QueryResult result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); getClock().increment(Duration.ofSeconds(2).toMillis()); result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); assertEquals(1, result.getResult().size()); assertEquals(1, result.getResult().get(0).size()); assertEquals(SCALE_FACTOR, ((Number) result.getResult().get(0).get(0)).intValue()); }
@Test public void testCacheRenewConcurrentInSingle() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofSeconds(10), false, false, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryExecutorService queryService = getQueryService(); QueryResult result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); getClock().increment(Duration.ofSeconds(10).toMillis()); List<CompletableFuture<QueryResult>> collect = IntStream.range(0, 10) .mapToObj(i -> queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult()) .collect(Collectors.toList()); for (CompletableFuture<QueryResult> future : collect) { result = future.join(); assertFalse(result.isFailed()); assertEquals(1, result.getResult().size()); assertEquals(1, result.getResult().get(0).size()); assertEquals(SCALE_FACTOR, ((Number) result.getResult().get(0).get(0)).intValue()); } }
@Test public void testIncrementalExpirationNoData() throws Exception { MaterializedView view = new MaterializedView("testview", "testview", "select count(*) as count from test", Duration.ofSeconds(1), true, false, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryExecutorService queryService = getQueryService(); QueryResult result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); getClock().increment(Duration.ofSeconds(2).toMillis()); result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); int total = 0; for (List<Object> objects : result.getResult()) { total += ((Number) objects.get(0)).intValue(); } assertEquals(SCALE_FACTOR, total); }
getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryExecutorService queryService = getQueryService(); QueryResult result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed());
@Test(invocationCount = 5) public void testIncrementalRealtimeExpiration() throws Exception { String tableName = CryptUtil.generateRandomKey(10); populate(tableName); MaterializedView view = new MaterializedView("testview", "testview", format("select count(*) as count from %s", checkCollection(tableName)), Duration.ofSeconds(1), true, true, ImmutableMap.of()); getMaterializedViewService().create(new RequestContext(PROJECT_NAME), view).join(); QueryExecutorService queryService = getQueryService(); QueryResult result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); populate(tableName); getClock().increment(Duration.ofSeconds(2).toMillis()); result = queryService.executeQuery(PROJECT_NAME, "select * from materialized.testview", ZoneId.systemDefault()).getResult().join(); assertFalse(result.isFailed()); int total = 0; for (List<Object> objects : result.getResult()) { total += ((Number) objects.get(0)).intValue(); } assertEquals(SCALE_FACTOR * 2, total); }