MapInfo

Added in 2.4.0
Deprecated in 2.6.0

@Target(allowedTargets = [AnnotationTarget.FUNCTION])
@Retention(value = AnnotationRetention.BINARY)
public annotation MapInfo


Declares which column(s) are used to build a map or multimap return value in a Dao query method.

This annotation is required when the key or value of the Map is a single column of one of the built in types (primitives, boxed primitives, enum, String, byte[], ByteBuffer) or a type with a converter (e.g. Date, UUID, etc).

The use of this annotation provides clarity on which column should be used in retrieving information required by the return type.

Example:

@MapInfo(keyColumn = "artistName", valueColumn = "songName")
@Query("SELECT * FROM Artist JOIN Song ON Artist.artistName = Song.artist")
fun getArtistNameToSongNames(): Map<String, List<String>>

@MapInfo(valueColumn = "songCount")
@Query("SELECT *, COUNT(mSongId) as songCount FROM Artist JOIN Song ON
Artist.artistName = Song.artist GROUP BY artistName"
)
fun getArtistAndSongCounts(): Map<Artist, Integer>

To use the @MapInfo annotation, you must provide either the key column name, value column name, or both, based on the Dao's method return type. Column(s) specified in the provided @MapInfo annotation must be present in the query result.

Summary

Public constructors

MapInfo(
    @NonNull String keyColumn,
    @NonNull String keyTable,
    @NonNull String valueColumn,
    @NonNull String valueTable
)

Public methods

final @NonNull String

The name of the column to be used for the map's keys.

final @NonNull String

The name of the table or alias to be used for the map's keys.

final @NonNull String

The name of the column to be used for the map's values.

final @NonNull String

The name of the table or alias to be used for the map's values.

Public constructors

MapInfo

public MapInfo(
    @NonNull String keyColumn,
    @NonNull String keyTable,
    @NonNull String valueColumn,
    @NonNull String valueTable
)

Public methods

getKeyColumn

public final @NonNull String getKeyColumn()

The name of the column to be used for the map's keys.

Returns
@NonNull String

The key column name.

getKeyTable

public final @NonNull String getKeyTable()

The name of the table or alias to be used for the map's keys.

Providing this value is optional. Useful for disambiguating between duplicate column names. For example, consider the following query: SELECT * FROM Artist AS a JOIN Song AS s ON a.id == s.artistId, then the @MapInfo for a return type Map<String, List<Song>> would be @MapInfo(keyColumn = "id", keyTable ="a").

Returns
@NonNull String

The key table name.

getValueColumn

public final @NonNull String getValueColumn()

The name of the column to be used for the map's values.

Returns
@NonNull String

The value column name.

getValueTable

public final @NonNull String getValueTable()

The name of the table or alias to be used for the map's values.

Providing this value is optional. Useful for disambiguating between duplicate column names. For example, consider the following query: SELECT * FROM Song AS s JOIN Artist AS a ON s.artistId == a.id, then the @MapInfo for a return type Map<Song, String> would be @MapInfo(valueColumn = "id", valueTable ="a").

Returns
@NonNull String

The key table name.