parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

select с динамическими запросами к таблице

Mizter Egoist 31.12.2017 03:18

Хочу понять можно ли реализовать динамические запросы к таблице записанной в файл.

Формат запроса имеет следующую структуру:
^_select[keys][
	$.email[mail@mail.com]
	$.server[example.ru]
]
/*или такой*/
^_select[keys][
	$.email[mail@mail.com]
]
/*или такой*/
^_select[session][
	$.id[$id]
]
/*в общем любые поля предусмотренные шаблоном*/
Файл с таблицей записан в формате json и имеет следующую структуру:
{
	"name":"keys",
	"count":"2",
	"created":"1514657168",
	"updated":"1514659786",
	"data":[
		{"id":"ce95c0ccfed2d119","email":"mail@mail.com","server":"example.ru","active":"","license":"c4205307-ef4b-4ba9-a4b6-c9b1ec575358","api":"0737618b-7e3e-4db4-a95a-5053663cc42f","secret":"576a1c21510241bc","public":"2a86503501a33577","access":"","reload":"","created":"1514657168","expires":"1546193168"},
		{"id":"ebed23804532d852","email":"mail@mail.com","server":"example.com","active":"","license":"854a3f3a-22d3-4b9e-8f8b-da6c11f8ebe7","api":"fbc6c4e5-ef77-4d17-adb9-8deade1ade00","secret":"9286bc5916af8835","public":"4e42b91262df310d","access":"","reload":"","created":"1514659786","expires":"1546195786"}
	]
}
Смог добиться результата, который только сообщает есть ли совпадения по запросу, но не знаю как возвращать строки совпадений, чтобы результатом была таблица с совпадениями, чтобы потом написать @_delete и @_update
@_select[table;data]
/*проверяем существует ли файл в директории*/
^if($self.base.[^math:md5[$table]]){
	$hash[^_open[$table]] /*открываем файл и делаем из него хэш*/
	$bone[^pattern[$table;$data]] /*создаем тело таблицы на основе шаблона*/
	$body[^table::create{^bone.foreach[key;value]{$key}[	]}] /*создаем таблицу*/
	^hash.data.foreach[;row]{
		^body.append[$row] /*наполняем таблицу данными из файла*/
	}
	$select[^bone.foreach[key;value]{
		^if(def $value && $key ne 'id'){
			$.[$key][^if(^body.locate[$key;$value]){true}{false}]
		}
	}] /*проверяем истину каждого ключа*/
	$keys[^select.keys[]] /*собираем ключи*/
	$response[^process{^^if(^keys.menu{'true' eq '$select.[$keys.key]'}[ && ])^{true^}^{false^}}] /*проверяем истину всего запроса*/
	^if(^response.bool[]){
		^json:string[есть совпадения]
	}{
		^json:string[нет совпадений]
	}
}