| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sumo 31.12.2017 10:04 / 31.12.2017 10:30
И писать запросы не только на равенство, а вообще по любому набору условий.@main[]
$db[^JsonDB::load[db.json]]
Select all:
^print[^db.select[][$.orderBy{$db.id}]]
Conditions:
^print[^db.select($db.server eq "example.ru")]
$lDateTime[^date::create[2018-12-30T18:06:10+00:00]]
^print[^db.select($db.email eq "mail@mail.com" && $db.expires < ^lDateTime.unix-timestamp[])]
Limits:
^print[^db.select($db.email eq "mail@mail.com")[$.limit(1) $.reverse(1)]]
@print[aData]
$result[^json:string[$aData;$.indent(true)]^#0A]
@CLASS
JsonDB
@OPTIONS
locals
@load[aFileName]
$self._fileName[$aFileName]
$self._db[^file::load[text;$aFileName]]
$self._keys[]
$self._db[^json:parse[^taint[as-is][$self._db.text];$.array[$self._parseData]]]
@GET_DEFAULT[aKeyName]
$result[^if(^self._keys.[contains][$aKeyName]){$self._db.data.[$aKeyName]}]
@select[aCond;aOptions]
## aOptions.orderBy
## aOptions.limit
## aOptions.offset
## aOptions.reverse
$aOptions[^hash::create[$aOptions]]
$lSelectOptions[^hash::create[]]
^aOptions.foreach[k;v]{
^if($k eq "limit" || $k eq "offset" || $k eq "reverse"){
$lSelectOptions.[$k]($v)
}
}
^if(def $aCond){
$result[^self._db.data.select($aCond)[$lSelectOptions]]
}{
$result[^table::create[$self._db.data][$lSelectOptions]]
}
^if(^aOptions.contains[orderBy]){
^result.sort{$aOptions.orderBy}
}
@_parseData[key;value]
$result[]
^if($value){
$lKeys[^value.0.keys[]]
$result[^process{^^table::create{^lKeys.foreach[k;v]{$v.key}[^#09]}}]
^value.foreach[k;v]{
^result.append[$v]
}
$self._keys[^lKeys.hash[key;key;$.type[string]]]
}