# FMPQuery

interface FMPQuery : FMPObject

Представляет собой логику для загрузки данных ресурсов и их чтения из локальной базы данных на основании скомпилированного query.

#### Since

21.04.01

#### Samples

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPQuery
    import ru.fsight.fmp.FMPTable
    import ru.fsight.fmp.FMPResult
    fun main() {
       //sampleStart
       /*
     * Пример создания FMPQuery.
     */
    val query: FMPQuery = fmp.query // Создать Builder.
    	.select("*")                  // Указать SELECT выражение.
    	.from(table)                  // Указать таблицу.
    	.build()                      // Создать FMPQuery.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPQuery
    import ru.fsight.fmp.FMPTable
    import ru.fsight.fmp.FMPResult
    fun main() {
       //sampleStart
       /*
     * Пример создания более сложного FMPQuery.
     */
    val query: FMPQuery = fmp.query                                 // Создать Builder.
    	.select("$table1.name, $table2.value")                        // Указать SELECT выражение.
    	.from(table1)                                                 // Указать первую таблицу.
    	.join(table2, FMPQuery.Join.INNER)                            // JOIN на первой таблице.
    	.on("$table1.id = $table2.user_id")                           // Указать ON выражение.
    	.where("$table2.value >= 1000 and $table2.something = 'abc'") // Указать WHERE выражение.
    	.build()                                                      // Создать FMPQuery.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPQuery
    import ru.fsight.fmp.FMPTable
    import ru.fsight.fmp.FMPResult
    fun main() {
       //sampleStart
       /*
     * Пример загрузки данных и их чтения.
     */
    if (isOnline) {
    	val download: FMPResult<Boolean> = query.download() // Если мы в онлайне, выполнить загрузку/обновление данных.
    }
    val data: FMPResult<List<Map<String, String>>> = query.read() // Прочесть данные запроса.
       //sampleEnd
    }

## Types

Builder
Link copied to clipboard
interface Builder : FMPObject.Builder
Join
Link copied to clipboard
enum Join : Enum<FMPQuery.Join>

Тип SQL JOIN запроса. RIGHT и FULL JOIN не поддерживаются текущей реализацией БД SQLite3, но их возможно эмулировать через модификацию SQL запроса.

Order
Link copied to clipboard
enum Order : Enum<FMPQuery.Order>

Тип запроса SQL ORDER BY.

## Properties

query
Link copied to clipboard
abstract val query: String

Скомпилированный через Builder SQL запрос.

transactions
Link copied to clipboard
abstract val transactions: List<FMPTransaction>

Список транзакций для использования при выполнении download.

## Functions

download
Link copied to clipboard
abstract fun download(onProgress: (Double) -> Unit = {}): FMPResult<Boolean>

Загрузить данные с сервера.

equals
Link copied to clipboard
abstract operator override fun equals(other: Any?): Boolean

Сравнить объекты между собой.

hashCode
Link copied to clipboard
abstract override fun hashCode(): Int

Хэш-код объектов. В отличие от equals он будет одинаков для объектов с одинаковыми ключевыми параметрами, но созданными от разных объектов FMP.

read
Link copied to clipboard
abstract fun read(): FMPResult<List<Map<String, String>>>

Получить данные query запроса. Данные доступны только если до этого был получен кэш через download.

rebuild
Link copied to clipboard
abstract override fun rebuild(): FMPQuery.Builder
toString
Link copied to clipboard
abstract override fun toString(): String

Получить ключевые параметры объекта в виде строки.