Data |
com/teacode/data
Сформирована библиотека com/teacode/data
, повторяющая функционал com/teacode/base
на базах libretto/data
. Основные методы библиотеки соответствуют libretto/data
:
// допустимые типы ключей и значений объектов struct Const = Int | Real | String | Unit def dir(pathstring: String!) // получение хэндлера базы по пути к ней def Data close() // закрытие базы, использовать не обязательно def context def c(data: Data!, #block) // установка базы по умолчанию def currentData // def w(#block) // выполнение блока в транзакции в базе по умолчанию def w(data, #block) // выполнение блока в транзакции в базе data def r(#block) // readonly–выполнение блока в транзакции в базе по умолчанию def r(data, #block) // readonly-выполнение блока в транзакции в базе data def Map id // уникальный идентификатор объекта базы def Map data // хэндлер базы, в которой хранится объект def Map remove() // постоянное удаление объекта из базы def root(data: Data!) // корневой объект базы data def root // корневой элемент в базе по умолчанию def new(data: Data!) // создание нового объекта в базе data def new() // создание нового объекта в базе по-умолчанию def Map to(key: Const!, value: Const*) // присваивание ключу значений def Map keys // все ключи объекта def Map `!`(ctx: Const!, key: Const!) // получение значений по ключу def Map `=`(key: Const!, values: Const*) // присваивание значений ключу def Map `+=`(key: Const!, vals: Const*) // добавка значения в ключ как последнего def Map `.=`(key: Const!, vals: Const*) // добавка значения в ключ как первого
Дополнительные методы.
Метод создания нового мэпа по "примеру" существующего
def Map new()
Методы получения мэпа по ID:
def byid(data: Data!, id: Int!) // в базе с хэндлером data
def byid(id: Int!) // в базе по-умолчанию
Типизированные конвейерные методы получения значений ключей
// получение мэпов в качестве значений ключа // работает на целочисленных значениях ключей, // интерпретируя их как идентификаторы объектов def Map map(key:Const!):Map? // один или ни одного объекта def Map maps(key:Const!):Map* // любое кол-во объектов def Map mape(key:Const!):Map! // ровно один объект def Map mapp(key:Const!):Map+ // один или больше объектов // получение строк в качестве значений ключа def Map string(key:Const!):String? def Map strings(key:Const!):String* def Map stringe(key:Const!):String! def Map stringp(key:Const!):String+ // получение целых в качестве значений ключа def Map int(key:Const!):Int? def Map ints(key:Const!):Int* def Map inte(key:Const!):Int! def Map intp(key:Const!):Int+ // получение вещественных в качестве значений ключа def Map real(key:Const!):Real? def Map reals(key:Const!):Real* def Map reale(key:Const!):Real! def Map realp(key:Const!):Real+
Конвейерный метод, берущий мэп по ключу, а при отсутствии, создающий его (get or create
):
def Map gecr(key:Const!):Map!
Метод, очищающий все значения полей мэпа
def Map clear
Метод, выдающий все значения всех ключей мэпа
def Map values:Const*
Методы установки значений (конвейерные)
def Map set(key, value) // присвоить значения def Map addf(key, value) // добавить значения в начало def Map addl(key, value) // добавить значения в конец
Метод удаления значения из последовательности в ключе
def Map remove(key, value)
Методы, интерпретирующие мэп как множество (проверяет наличие элемента в множестве, удаляет элемент из множества, добавляет элемент в множество, изменяет состояние элемента в множестве на противоположное):
def Map sethas(el) def Map setdel(el) def Map setadd(el) def Map settoggle(el)
Пример работы с базой.
use com/teacode/data def dbase = data/dir("/Users/Andrei/Desktop/ournewbase") def root = data/root(dbase) def addperson(name:String!, address:String!) = { // транзакция data/w: { root.addl("persons", data/new() {"name" to name; "address" to address}) } } def getpersons { root.maps("persons").println:($!"name", $!"address") } def main { addperson("Ann", "Paris") addperson("Mike", "London") addperson("John", "Toronto") // транзакция data/w: getpersons }
Результат:
(Ann,Paris) (Mike,London) (John,Toronto)
(если до этого база была пустой или отсутствовала).