henriquecbuss / elm-eos / Eos.Query

Perform queries to get data from tables. The CLI gives you functions to perform type-safe queries, and this module helps you actually turn them into Cmds.


type Query response
    = Query ({ scope : String, indexPosition : Maybe Index, lowerBound : Maybe Cursor, upperBound : Maybe Cursor, limit : Maybe Basics.Int, reverse : Basics.Bool, baseUrl : String, contract : String, table : String, decoder : Json.Decode.Decoder response })

The Query type. It's only exposed so that the CLI can have access to it. You shouldn't construct it by hand.

send : (Result Http.Error (Response response) -> msg) -> Query response -> Platform.Cmd.Cmd msg

Send a Query to EOSIO.

You shouldn't need to construct a Query by hand. Instead, use functions generated by the CLI. They live in the Table.Query module.

Some parameters of the query are defined when running the CLI (like baseUrl). Others can be modified with functions like withLimit and withBaseUrl (in case you need to override it).

This returns a Response, since there may be pagination in the result. If you want to paginate, keep the Cursor returned in the Response and use withLowerBound or withUpperBound in the next query.

import Eos.Query
import Http
import Table
import Table.Query

type Msg
    = GotAccountData (Result Http.Error (Eos.Query.Response Table.Accounts))

queryAccounts : Cmd Msg
queryAccounts =
    Table.Query.accounts { scope = "henriquebuss" }
        |> Eos.Query.withLimit 20
        |> Eos.Query.send GotAccountData


type alias Response response =
{ hasMore : Basics.Bool
, nextCursor : Cursor
, result : List response 
}

A response from a Query. It contains the results, and also pagination data. You can check if there is more data to be fetched with the hasMore field. If there is, you can use the nextCursor field to fetch the next page of data with withLowerBound or withUpperBound.

withBaseUrl : String -> Query response -> Query response

Redefine the base url to send a Query. This is already defined when running the CLI, so you shouldn't need this function often.

withLimit : Basics.Int -> Query response -> Query response

Set how many entries to fetch on send.

withLowerBound : Cursor -> Query response -> Query response

Define the lower bound of a Query. This is used to paginate the results. You can get a Cursor from a Response, which you can get with send.

withUpperBound : Cursor -> Query response -> Query response

Define the upper bound of a Query. This is used to paginate the results. You can get a Cursor from a Response, which you can get with send.

withReverse : Basics.Bool -> Query response -> Query response

Define if the Query results should be reversed.


type Cursor

Used to set the lower bound or upper bound with withLowerBound or withUpperBound. You can get one of these from send.


type Index
    = Primary
    | Secondary
    | Tertiary
    | Fourth
    | Fifth
    | Sixth
    | Seventh
    | Eighth
    | Ninth
    | Tenth

The Index to use when sending a Query.

map : (response -> mappedResponse) -> Query response -> Query mappedResponse

Map the response of a Query. This is here so the CLI can use it. You probably shouldn't need to use it.