Skip to content

Commit 1472141

Browse files
authored
fix a bug that local relationship query does not exclude soft deleted relationships (#334)
1 parent a249873 commit 1472141

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/EbeanLocalRelationshipQueryDAO.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,15 +245,15 @@ private String buildFindRelationshipSQL(@Nullable final String destTableName, @N
245245
sqlBuilder.append("INNER JOIN ").append(sourceTableName).append(" st ON st.urn=rt.source ");
246246
}
247247

248+
sqlBuilder.append("WHERE deleted_ts is NULL");
248249
String whereClause = SQLStatementUtils.whereClause(SUPPORTED_CONDITIONS,
249250
new Pair<>(sourceEntityFilter, "st"),
250251
new Pair<>(destinationEntityFilter, "dt"),
251252
new Pair<>(relationshipFilter, "rt"));
252253

253254
if (whereClause != null) {
254-
sqlBuilder.append("WHERE ").append(whereClause);
255+
sqlBuilder.append(" AND ").append(whereClause);
255256
}
256-
257257
return sqlBuilder.toString();
258258
}
259259
}

dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/localrelationship/EbeanLocalRelationshipQueryDAOTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
import com.linkedin.metadata.dao.EbeanLocalRelationshipQueryDAO;
1212
import com.linkedin.metadata.dao.EbeanLocalRelationshipWriterDAO;
1313
import com.linkedin.metadata.dao.IEbeanLocalAccess;
14+
import com.linkedin.metadata.dao.internal.BaseGraphWriterDAO;
1415
import com.linkedin.metadata.dao.scsi.EmptyPathExtractor;
1516
import com.linkedin.metadata.dao.utils.EBeanDAOUtils;
1617
import com.linkedin.metadata.dao.utils.EmbeddedMariaInstance;
18+
import com.linkedin.metadata.dao.utils.SQLSchemaUtils;
19+
import com.linkedin.metadata.dao.utils.SQLStatementUtils;
1720
import com.linkedin.metadata.query.AspectField;
1821
import com.linkedin.metadata.query.Condition;
1922
import com.linkedin.metadata.query.LocalRelationshipCriterion;
@@ -38,6 +41,7 @@
3841
import com.linkedin.testing.urn.FooUrn;
3942
import io.ebean.Ebean;
4043
import io.ebean.EbeanServer;
44+
import io.ebean.SqlUpdate;
4145
import java.io.IOException;
4246
import java.net.URISyntaxException;
4347
import java.nio.charset.StandardCharsets;
@@ -156,6 +160,25 @@ public void testFindOneRelationship() throws Exception {
156160
Set<FooUrn> actual = reportsToAlice.stream().map(reportsTo -> makeFooUrn(reportsTo.getSource().toString())).collect(Collectors.toSet());
157161
Set<FooUrn> expected = ImmutableSet.of(jack, bob);
158162
assertEquals(actual, expected);
163+
164+
// Soft (set delete_ts = now()) Delete Jack reports-to ALice relationship
165+
SqlUpdate deletionSQL = _server.createSqlUpdate(
166+
SQLStatementUtils.deleteLocaRelationshipSQL(SQLSchemaUtils.getRelationshipTableName(jackReportsToAlice),
167+
BaseGraphWriterDAO.RemovalOption.REMOVE_ALL_EDGES_FROM_SOURCE));
168+
deletionSQL.setParameter("source", jack.toString());
169+
deletionSQL.execute();
170+
171+
reportsToAlice = _localRelationshipQueryDAO.findRelationships(FooSnapshot.class,
172+
new LocalRelationshipFilter().setCriteria(new LocalRelationshipCriterionArray()), FooSnapshot.class, filter,
173+
ReportsTo.class, new LocalRelationshipFilter().setCriteria(new LocalRelationshipCriterionArray()), 0, 10);
174+
175+
// Expect: only bob reports to Alice
176+
assertEquals(reportsToAlice.size(), 1);
177+
actual = reportsToAlice.stream()
178+
.map(reportsTo -> makeFooUrn(reportsTo.getSource().toString()))
179+
.collect(Collectors.toSet());
180+
expected = ImmutableSet.of(bob);
181+
assertEquals(actual, expected);
159182
}
160183

161184
@Test

0 commit comments

Comments
 (0)