mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-08 08:31:37 +00:00
Merge pull request #352 from open-metadata/ISSUE-350
Fix #350: Column level tag deletion is not working
This commit is contained in:
commit
c70e9f028b
@ -385,6 +385,7 @@ public abstract class TableRepository {
|
|||||||
|
|
||||||
// Remove previous tags. Merge tags from the update and the existing tags
|
// Remove previous tags. Merge tags from the update and the existing tags
|
||||||
EntityUtil.removeTags(tagDAO(), original.getFullyQualifiedName());
|
EntityUtil.removeTags(tagDAO(), original.getFullyQualifiedName());
|
||||||
|
updateColumns(original, updated);
|
||||||
|
|
||||||
storeTable(updated, true);
|
storeTable(updated, true);
|
||||||
updateRelationships(original, updated);
|
updateRelationships(original, updated);
|
||||||
@ -452,8 +453,10 @@ public abstract class TableRepository {
|
|||||||
if (stored.getDescription() != null && !stored.getDescription().isEmpty()) {
|
if (stored.getDescription() != null && !stored.getDescription().isEmpty()) {
|
||||||
updated.setDescription(stored.getDescription()); // Carry forward non-empty description
|
updated.setDescription(stored.getDescription()); // Carry forward non-empty description
|
||||||
}
|
}
|
||||||
// Combine all the tags (duplicates will be deduped)
|
|
||||||
updated.setTags(EntityUtil.mergeTags(updated.getTags(), stored.getTags()));
|
EntityUtil.removeTagsByPrefix(tagDAO(), stored.getFullyQualifiedName());
|
||||||
|
//update tags
|
||||||
|
updated.setTags(updated.getTags());
|
||||||
}
|
}
|
||||||
storedTable.setColumns(updatedColumns);
|
storedTable.setColumns(updatedColumns);
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ import java.util.UUID;
|
|||||||
@Collection(name = "users", repositoryClass = "org.openmetadata.catalog.jdbi3.UserRepository")
|
@Collection(name = "users", repositoryClass = "org.openmetadata.catalog.jdbi3.UserRepository")
|
||||||
public class UserResource {
|
public class UserResource {
|
||||||
public static final Logger LOG = LoggerFactory.getLogger(UserResource.class);
|
public static final Logger LOG = LoggerFactory.getLogger(UserResource.class);
|
||||||
public static final String USER_COLLECTION_PATH = "/v1/users/";
|
public static final String USER_COLLECTION_PATH = "v1/users/";
|
||||||
private final UserRepository dao;
|
private final UserRepository dao;
|
||||||
private final CatalogAuthorizer authorizer;
|
private final CatalogAuthorizer authorizer;
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ import java.text.ParseException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -829,6 +830,39 @@ public class TableResourceTest extends CatalogApplicationTest {
|
|||||||
adminAuthHeaders());
|
adminAuthHeaders());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void patch_tableColumnTags_200_ok(TestInfo test) throws HttpResponseException, JsonProcessingException {
|
||||||
|
// Create table without description, table tags, tier, owner, tableType, and tableConstraints
|
||||||
|
Table table = createTable(create(test).withTableConstraints(null), adminAuthHeaders());
|
||||||
|
assertNull(table.getDescription());
|
||||||
|
assertNull(table.getOwner());
|
||||||
|
assertNull(table.getTableType());
|
||||||
|
assertNull(table.getTableConstraints());
|
||||||
|
|
||||||
|
|
||||||
|
Map<String, List<TagLabel>> columnTagMap = new HashMap<>();
|
||||||
|
columnTagMap.put("c1", singletonList(USER_ADDRESS_TAG_LABEL));
|
||||||
|
columnTagMap.put("c2", singletonList(USER_ADDRESS_TAG_LABEL));
|
||||||
|
columnTagMap.put("c3", singletonList(USER_BANK_ACCOUNT_TAG_LABEL));
|
||||||
|
|
||||||
|
validateColumnTags(table, columnTagMap);
|
||||||
|
|
||||||
|
List<Column> updatedColumns = Arrays.asList(
|
||||||
|
new Column().withName("c1").withColumnDataType(ColumnDataType.BIGINT)
|
||||||
|
.withTags(List.of(USER_ADDRESS_TAG_LABEL, USER_BANK_ACCOUNT_TAG_LABEL)),
|
||||||
|
new Column().withName("c2").withColumnDataType(ColumnDataType.BIGINT)
|
||||||
|
.withTags(singletonList(USER_ADDRESS_TAG_LABEL)),
|
||||||
|
new Column().withName("c3").withColumnDataType(ColumnDataType.BIGINT)
|
||||||
|
.withTags(new ArrayList<>()));
|
||||||
|
|
||||||
|
table = patchTableColumnAttributesAndCheck(table, updatedColumns, adminAuthHeaders());
|
||||||
|
table.setOwner(USER_OWNER1); // Get rid of href and name returned in the response for owner
|
||||||
|
columnTagMap.put("c1", List.of(USER_ADDRESS_TAG_LABEL, USER_BANK_ACCOUNT_TAG_LABEL));
|
||||||
|
columnTagMap.put("c2", singletonList(USER_ADDRESS_TAG_LABEL));
|
||||||
|
columnTagMap.put("c3", new ArrayList<>());
|
||||||
|
validateColumnTags(table, columnTagMap);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void patch_tableIDChange_400(TestInfo test) throws HttpResponseException, JsonProcessingException {
|
public void patch_tableIDChange_400(TestInfo test) throws HttpResponseException, JsonProcessingException {
|
||||||
// Ensure table ID can't be changed using patch
|
// Ensure table ID can't be changed using patch
|
||||||
@ -928,11 +962,23 @@ public class TableResourceTest extends CatalogApplicationTest {
|
|||||||
tableConstraints, tags);
|
tableConstraints, tags);
|
||||||
|
|
||||||
// GET the table and Validate information returned
|
// GET the table and Validate information returned
|
||||||
Table getTable = getTable(table.getId(), "owner,tableConstraints,tags", authHeaders);
|
Table getTable = getTable(table.getId(), "owner,tableConstraints,columns, tags", authHeaders);
|
||||||
validateTable(getTable, table.getDescription(), owner, null, tableType, tableConstraints, tags);
|
validateTable(getTable, table.getDescription(), owner, null, tableType, tableConstraints, tags);
|
||||||
return updatedTable;
|
return updatedTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Table patchTableColumnAttributesAndCheck(Table table, List<Column> columns, Map<String, String> authHeaders)
|
||||||
|
throws JsonProcessingException, HttpResponseException {
|
||||||
|
String tableJson = JsonUtils.pojoToJson(table);
|
||||||
|
|
||||||
|
// Update the table attributes
|
||||||
|
table.setColumns(columns);
|
||||||
|
|
||||||
|
// Validate information returned in patch response has the updates
|
||||||
|
Table updatedTable = patchTable(tableJson, table, authHeaders);
|
||||||
|
return updatedTable;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO disallow changing href, usage
|
// TODO disallow changing href, usage
|
||||||
// TODO allow changing columns, tableConstraints
|
// TODO allow changing columns, tableConstraints
|
||||||
// TODO Change column attributes
|
// TODO Change column attributes
|
||||||
@ -1077,6 +1123,14 @@ public class TableResourceTest extends CatalogApplicationTest {
|
|||||||
TestUtils.validateEntityReference(table.getFollowers());
|
TestUtils.validateEntityReference(table.getFollowers());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void validateColumnTags(Table table, Map<String, List<TagLabel>> columnTagMap)
|
||||||
|
throws HttpResponseException {
|
||||||
|
for (Column column: table.getColumns()) {
|
||||||
|
List<TagLabel> expectedTags = columnTagMap.get(column.getName());
|
||||||
|
validateTags(expectedTags, column.getTags());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Table getTable(UUID id, Map<String, String> authHeaders) throws HttpResponseException {
|
public static Table getTable(UUID id, Map<String, String> authHeaders) throws HttpResponseException {
|
||||||
return getTable(id, null, authHeaders);
|
return getTable(id, null, authHeaders);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user