package de.superx.bianalysis.repository; import java.util.List; import java.util.Optional; import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.RepositoryDefinition; import org.springframework.data.repository.query.Param; import de.superx.bianalysis.FaultyMetadataException; import de.superx.bianalysis.metadata.Identifier; import de.superx.bianalysis.repository.dto.DimensionDto; import de.superx.jdbc.repository.BiaAdminCrudRepository; @RepositoryDefinition(domainClass = DimensionDto.class, idClass = Identifier.class) public interface DimensionRepository extends BiaAdminCrudRepository { List findByFactTableId(Identifier factTableId); Optional findById(Identifier id); @Override List findAll(); @Query( " SELECT d.id" + " FROM metadata.dimension d" + " LEFT JOIN metadata.dimension_attribute da" + " ON da.dimension_id = d.id" + " WHERE da.id is null" + " AND d.conformed = :confDim" + " AND d.facttable_id = :factId" ) List getRolePlayingIds(@Param("confDim") String confDim, @Param("factId") String factId); @Query( "SELECT dimension_id " + "FROM metadata.dimension_attribute da " + "WHERE id = :attrId" ) Identifier findDimensionIdForAttribute(@Param("attrId") String attrId); @Query( "SELECT conformed" + " FROM metadata.dimension" + " WHERE facttable_id = :factId" + " AND conformed IS NOT NULL" ) List getUsedConformedDimensionsByFactTable(@Param("factId") String factId); default DimensionDto findByIdOrThrow(Identifier id) { return findById(id) .orElseThrow(() -> new FaultyMetadataException(id)); } }