in service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalog.java [65:125]
public GenericTableEntity createGenericTable(
TableIdentifier tableIdentifier, String format, String doc, Map<String, String> properties) {
PolarisResolvedPathWrapper resolvedParent =
resolvedEntityView.getResolvedPath(tableIdentifier.namespace());
if (resolvedParent == null) {
// Illegal state because the namespace should've already been in the static resolution set.
throw new IllegalStateException(
String.format(
"Failed to fetch resolved parent for TableIdentifier '%s'", tableIdentifier));
}
List<PolarisEntity> catalogPath = resolvedParent.getRawFullPath();
PolarisResolvedPathWrapper resolvedEntities =
resolvedEntityView.getPassthroughResolvedPath(
tableIdentifier, PolarisEntityType.TABLE_LIKE, PolarisEntitySubType.ANY_SUBTYPE);
GenericTableEntity entity =
GenericTableEntity.of(
resolvedEntities == null ? null : resolvedEntities.getRawLeafEntity());
if (null == entity) {
entity =
new GenericTableEntity.Builder(tableIdentifier, format)
.setCatalogId(this.catalogId)
.setParentNamespace(tableIdentifier.namespace())
.setParentId(resolvedParent.getRawLeafEntity().getId())
.setId(
this.metaStoreManager
.generateNewEntityId(this.callContext.getPolarisCallContext())
.getId())
.setProperties(properties)
.setDoc(doc)
.setCreateTimestamp(System.currentTimeMillis())
.build();
} else {
throw new AlreadyExistsException(
"Iceberg table, view, or generic table already exists: %s", tableIdentifier);
}
EntityResult res =
this.metaStoreManager.createEntityIfNotExists(
this.callContext.getPolarisCallContext(),
PolarisEntity.toCoreList(catalogPath),
entity);
if (!res.isSuccess()) {
switch (res.getReturnStatus()) {
case BaseResult.ReturnStatus.ENTITY_ALREADY_EXISTS:
throw new AlreadyExistsException(
"Iceberg table, view, or generic table already exists: %s", tableIdentifier);
default:
throw new IllegalStateException(
String.format(
"Unknown error status for identifier %s: %s with extraInfo: %s",
tableIdentifier, res.getReturnStatus(), res.getExtraInformation()));
}
}
GenericTableEntity resultEntity = GenericTableEntity.of(res.getEntity());
LOGGER.debug(
"Created GenericTable entity {} with TableIdentifier {}", resultEntity, tableIdentifier);
return resultEntity;
}