private final Set<String> componentUuids;
private final Set<String> componentKeys;
private final Long analyzedBefore;
+ private final Long anyBranchAnalyzedBefore;
private final Long anyBranchAnalyzedAfter;
private final Date createdAfter;
private final boolean onProvisionedOnly;
this.componentKeys = builder.componentKeys;
this.isPrivate = builder.isPrivate;
this.analyzedBefore = builder.analyzedBefore;
+ this.anyBranchAnalyzedBefore = builder.anyBranchAnalyzedBefore;
this.anyBranchAnalyzedAfter = builder.anyBranchAnalyzedAfter;
this.createdAfter = builder.createdAfter;
this.onProvisionedOnly = builder.onProvisionedOnly;
return analyzedBefore;
}
+ @CheckForNull
+ public Long getAnyBranchAnalyzedBefore() {
+ return anyBranchAnalyzedBefore;
+ }
+
@CheckForNull
public Long getAnyBranchAnalyzedAfter() {
return anyBranchAnalyzedAfter;
private Set<String> componentUuids;
private Set<String> componentKeys;
private Long analyzedBefore;
+ private Long anyBranchAnalyzedBefore;
private Long anyBranchAnalyzedAfter;
private Date createdAfter;
private boolean onProvisionedOnly = false;
return this;
}
- public Builder setAnalyzedBefore(@Nullable Long analyzedBefore) {
- this.analyzedBefore = analyzedBefore;
+ public Builder setAnalyzedBefore(@Nullable Long l) {
+ this.analyzedBefore = l;
+ return this;
+ }
+
+ public Builder setAnyBranchAnalyzedBefore(@Nullable Long l) {
+ this.anyBranchAnalyzedBefore = l;
return this;
}
)
)
</if>
+ <if test="query.anyBranchAnalyzedBefore != null">
+ and (
+ exists(
+ -- branches of projects
+ select 1 from snapshots s
+ inner join project_branches pb on s.component_uuid = pb.uuid
+ where pb.project_uuid = p.uuid
+ and s.status='P'
+ and s.islast = ${_true}
+ and s.created_at < #{query.anyBranchAnalyzedBefore,jdbcType=BIGINT}
+ )
+ or exists (
+ -- applications, portfolios
+ select 1 from snapshots s
+ where s.component_uuid = p.uuid
+ and s.status='P'
+ and s.islast = ${_true}
+ and s.created_at < #{query.anyBranchAnalyzedBefore,jdbcType=BIGINT}
+ )
+ )
+ </if>
<if test="query.createdAfter != null">
and p.created_at >= #{query.createdAfter,jdbcType=TIMESTAMP}
</if>
db.components().insertSnapshot(recentProject, s -> s.setCreatedAt(recentTime).setLast(true));
db.components().insertSnapshot(recentProject, s -> s.setCreatedAt(aLongTimeAgo).setLast(false));
- // before date
+ // before date on main branch
assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime)))
.containsExactlyInAnyOrder(oldProject.uuid());
assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(aLongTimeAgo)))
assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime + 1_000L)))
.containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
+ // before date on any branch
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime)))
+ .containsExactlyInAnyOrder(oldProject.uuid());
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(aLongTimeAgo)))
+ .isEmpty();
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime + 1_000L)))
+ .containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
+
// after date
assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedAfter(recentTime - 1_000L)))
.containsExactlyInAnyOrder(recentProject.uuid());
db.components().insertSnapshot(recentProjectBranch, s -> s.setCreatedAt(recentTime).setLast(true));
db.components().insertSnapshot(recentProjectBranch, s -> s.setCreatedAt(aLongTimeAgo).setLast(false));
+ // before date on main branch only
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime))).isEmpty();
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(aLongTimeAgo))).isEmpty();
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnalyzedBefore(recentTime + 1_000L))).isEmpty();
+
+ // before date on any branch
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime)))
+ .containsExactlyInAnyOrder(oldProject.uuid());
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(aLongTimeAgo)))
+ .isEmpty();
+ assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedBefore(recentTime + 1_000L)))
+ .containsExactlyInAnyOrder(oldProject.uuid(), recentProject.uuid());
+
// after date
assertThat(selectProjectUuidsByQuery(q -> q.setAnyBranchAnalyzedAfter(recentTime - 1_000L)))
.containsExactlyInAnyOrder(recentProject.uuid());
public void build_query() {
ComponentQuery underTest = ComponentQuery.builder()
.setNameOrKeyQuery("key")
- .setAnalyzedBefore(100L)
+ .setAnyBranchAnalyzedBefore(100L)
.setAnyBranchAnalyzedAfter(200L)
.setCreatedAfter(new Date(300L))
.setQualifiers(PROJECT)
assertThat(underTest.getNameOrKeyQuery()).isEqualTo("key");
assertThat(underTest.getQualifiers()).containsOnly(PROJECT);
- assertThat(underTest.getAnalyzedBefore()).isEqualTo(100L);
+ assertThat(underTest.getAnyBranchAnalyzedBefore()).isEqualTo(100L);
assertThat(underTest.getAnyBranchAnalyzedAfter()).isEqualTo(200L);
assertThat(underTest.getCreatedAfter().getTime()).isEqualTo(300L);
assertThat(underTest.isOnProvisionedOnly()).isFalse();