Новости | 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]]] }