package org.gbif.checklistbank.service.mybatis.mapper;
import org.gbif.api.model.checklistbank.ParsedName;
import org.gbif.api.model.common.paging.Pageable;
import org.gbif.api.vocabulary.Rank;
import java.util.List;
import java.util.UUID;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.ResultHandler;
/**
* The MyBatis mapper interface for ParsedName instance to persist in the name table.
* ParsedName.strain property is being ignored currently and not persisted!
*/
public interface ParsedNameMapper {
/**
* Get a parsed name by its name key.
*
* @param key the key of the parsed name
*
* @return the parsed name or null
*/
ParsedName get(@Param("key") int key);
/**
* Get a parsed name by a given name usage key.
*
* @param usageKey the key of the parsed name
*
* @return the parsed name or null
*/
ParsedName getByUsageKey(@Param("key") int usageKey);
ParsedName getByName(@Param("name") String scientificName, @Param("rank") Rank rank);
/**
* Insert a new parsed name into the name table.
*/
void create(@Param("pn") ParsedName name);
void create2(@Param("key") int key, @Param("pn") ParsedName name);
void failed(@Param("key") int key, @Param("scientific_name") String scientificName, @Param("rank") Rank rank);
void delete(@Param("key") int key);
int deleteOrphaned(@Param("keyMin") int keyMin, @Param("keyMax") int keyMax);
/**
* @return the maximum name key used
*/
Integer maxKey();
List<ParsedName> list(@Param("uuid") UUID datasetKey, @Param("page") Pageable page);
/**
* Iterates over all names and processes them with the supplied handler.
* This allows a single query to efficiently stream all its values without keepong them in memory.
*
* @param handler to process each name with
*/
void processNames(ResultHandler<ParsedName> handler);
void update(@Param("pn") ParsedName name);
}