С помощью запросов к базе данных смарт-терминала приложения могут получать необходимую информацию, например, данные товаров (класс ProductQuery.kt).
Пример запроса для получения данных товара:
val products = ProductQuery()
.alcoholByVolume.between(BigDecimal(40), BigDecimal(70))
.and(ProductQuery()
.price.greater(BigDecimal(100), true)
.or().tareVolume.greater(BigDecimal(10))
.or(ProductQuery()
.price.lower(BigDecimal(5))
.and().name.like("Спиртное")
)
).sortOrder(ProductQuery.SortOrder()
.price.asc()
.alcoholByVolume.desc()
.tareVolume.asc()
).limit(1000)
.execute(context)
Для построения запросов доступны следующие операторы сравнения:
fun equal(value: V) – аналогичен оператору “равно” =.fun notEqual(value: V) – аналогичен оператору “не равно” !=.fun greater(value: V, including: Boolean = false) – аналогичен оператору “больше” >.fun lower(value: V, including: Boolean = false) – аналогичен оператору “меньше” <.fun like(text: String, escape: Char? = null) – определяет совпадает ли символьная строка с заданным шаблоном. Где escape – символ, предшествующий спецсимволам, если их надо использовать в прямом из значении (например, “%”), аналогично синтаксису SQL.fun between(leftValue: V, rightValue: V) – задаёт диапазон для проверки.fun notBetween(leftValue: V, rightValue: V) – задаёт диапазон, за пределами которого находится удовлетворяющий условию результат.fun inside(values: List<V>) – определяет находится ли значение в заданном списке.fun inside(values: Array<V>) – определяет находится ли значение в заданном массиве.fun notInside(values: List<V>) – определяет находится ли значение за пределами заданного списка.fun notInside(values: Array<V>) – определяет находится ли значение за пределами заданного массива.Для построения запросов доступны следующие логические операторы:
and(intersection: Executor<Q, S, R>) – логическое “И” (пересечение).or(union: Executor<Q, S, R>) – логическое “ИЛИ” (объединение).and(): Q – логическое “И”.or(): Q – логическое “ИЛИ”.