1 убрать subinclude из автоконф
15 report name "name" format "json" to "filename.txt";
16 report name "name" format "text" to tempfile;
17 report name "name" format "json"; // -> stdout
18 report name "name" to "filename.txt"; // text -> filename.txt
19 report name "name"; // text -> stdout
20 report name "name" format "xslx" to "filename.xlsx"; // for xslx expected filename or tempfile
22 loop select * from tbl into a, b, c do
33 "msg": "error message"
39 {"is_dir": false, "name": "file.ext", "path": "/var/www/scr.xsql", "params": [{"type": "int", "label: "name"},...]},
40 {"is_dir": true, "name": "dir", "content": [...]},
44 добавить .params, здесь перечислить переменные и добавлять их после разбора в случае отсутствия
47 + убрать генерацию uuid, принимать id в запросе
58 "script.sql" 2+6, "str1" "str2"
65 plot dataset select ...;
68 * make params for new version in ixsql
72 types: int, float, string, bool
74 add: function xsql_clone_exec
75 remove: functions *meta*
78 - it will make xsqld on libmocrohttp
79 --------------------------------------------
81 fmtcreate - инициализация
82 fmtfname - генерация имени
83 fmtmkfd - открытие описателя вывода
85 fmtclosefd - закрытие описателя вывода
88 - копирование параметра - mkstr, strdup ...
89 - создание уникального
90 В обоих случаях подойдет mktempnam ()
91 Может использоваться для любых форматтеров.
94 - open () для text, json
95 - new_workbook (), workbook_add_worksheet () для xls
96 - gtk_builder_get_object () для GUI
99 - write () для text, json
100 - worksheet_write_xxx
104 - close () для text, json
105 - workbook_close () для xls
108 Форматтеры создаются с определенными функциями для каждого форматтера и
109 в дальнейшем функции можно подменять.
112 - избавиться от tempfile в report, на сервере принудительно ставить tempfile
113 путем замены нужного fmtfname. Будет работать со всеми форматтерами, кроме
114 GUI, но это не важно, т.к. этот форматтер не является встроенным
115 - путем замены fmtopenfd, fmtclosefd, fmtwritefd писать в файл включая stdout и
118 ----------------------------------
119 * в report имя отчета, имя файла сделать переменными
120 * добавить группировку в report (для форматов text, json игнорируются)
121 * добавить выравнивание в отчетах (для форматов text, json игнорируются)
123 + extract_query - error !
128 odd background ffffff foreground 222222 even background eeeeee foreground 222222
130 background 42a5e3 foreground ffffff
132 background aaaaaa foreground 000000 negative background ff0000 fg ffffff
134 background aaaaaa foreground 000000
136 background ffffff foreground 000000;
137 group select fld1, fld2, fld3, fld4, grp1, grp2, grp3 from tbl do
139 by grp1 header grp1 header "group"
140 by grp2, grp3 header "total:", sum(fld2)+sum(fld3) footer count(fld2), avg(fld4);
143 * встроенные функции: sum(), avg(), count()
144 sum() - 1 неявная переменная аггрегатор
145 count() - 1 неявная переменная счетчик
146 avg() - 2 неявные переменные: аггрегатор и счетчик
147 * для выполнения функций добавить структуру типа xsql_script_t, в которой всегда есть переменная result
148 добавить оператор return
161 * result = x; return; == return x;
163 * добавить .include <script.xsql>
164 xsql_script_t.text: char* -> str_t*
186 result = result / cnt;
192 +- контроль типов аргументов
193 +- падение при неверном описании типа параметра
195 * клонирование ast-дерева
199 - при декларации не создавать var_list, param_list
200 - при распознавании вызова создавать xsql_call_*_t, содержащие var_list, param_list.
201 переменные аггрегатов count, sum, avg ... содержаться в xsql_call_*_t так же
202 - перед вызовом в объект call->fun присваивать var_list, param_list.
203 - при освобождении аггрегатов не освобождать var_list, param_list, они будут освобождены в caller'ах
205 FIXME : set variables by hand vs. memset in parser.c - xsql_next_agg ()