building
[libxsql.git] / TODO
blob404908a8e44d137a7afc051d2e8df137b6819b4d
1 убрать subinclude из автоконф
4     "label": [...],
5     "result": [
6         "header": [...],
7         "data": [
8             "record": [...],
9             ...
10         ]
11     ],
12     ...
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
23     //
24 end;
27     "result": "ok",
28     "data": [<data>]
32     "result": "fail",
33     "msg": "error message"
36 Data:
37 script list:
39     {"is_dir": false, "name": "file.ext", "path": "/var/www/scr.xsql", "params": [{"type": "int", "label: "name"},...]},
40     {"is_dir": true, "name": "dir", "content": [...]},
41     ...
44 добавить .params, здесь перечислить переменные и добавлять их после разбора в случае отсутствия
45 .params x "X", y "Y";
47 + убрать генерацию uuid, принимать id в запросе
48 + добавить 
49 case x
50     when 1 then
51     ...
52     when 2 then
53     ...
54     else
55     ...
56 end;
58 "script.sql" 2+6, "str1" "str2"
60 script.sql :
61 x = $1 * 2;
62 y = $2 + $3;
64 gnuplot
65 plot dataset select ...;
66 plot expr ...;
68 * make params for new version in ixsql
70 .params:
71 type "name", ....;
72 types: int, float, string, bool
74 add: function xsql_clone_exec
75 remove: functions *meta*
78 - it will make xsqld on libmocrohttp
79 --------------------------------------------
80 fmtopen разбить на
81     fmtcreate - инициализация
82     fmtfname - генерация имени
83     fmtmkfd - открытие описателя вывода
84     fmtwritefd - вывод
85     fmtclosefd - закрытие описателя вывода
87 fmtfname:
88     - копирование параметра - mkstr, strdup ...
89     - создание уникального
90     В обоих случаях подойдет mktempnam ()
91     Может использоваться для любых форматтеров.
93 fmtmkfd:
94     - open () для text, json
95     - new_workbook (), workbook_add_worksheet () для xls
96     - gtk_builder_get_object () для GUI
98 fmtwritefd:
99     - write () для text, json
100     - worksheet_write_xxx
101     - ... GUI
103 fmtclosefd:
104     - close () для text, json
105     - workbook_close () для xls
106     - ничего для GUI
108 Форматтеры создаются с определенными функциями для каждого форматтера и
109 в дальнейшем функции можно подменять.
111 Что дает:
112     - избавиться от tempfile в report, на сервере принудительно ставить tempfile
113       путем замены нужного fmtfname. Будет работать со всеми форматтерами, кроме
114       GUI, но это не важно, т.к. этот форматтер не является встроенным
115     - путем замены fmtopenfd, fmtclosefd, fmtwritefd писать в файл включая stdout и
116       stderr или в widget.
118 ----------------------------------
119 * в report имя отчета, имя файла сделать переменными
120 * добавить группировку в report (для форматов text, json игнорируются)
121 * добавить выравнивание в отчетах (для форматов text, json игнорируются)
123 + extract_query - error !
125 report .....
126     style blue
127         dataset
128             odd background ffffff foreground 222222 even background eeeeee foreground 222222
129         fieldnames
130             background 42a5e3 foreground ffffff
131         header
132             background aaaaaa foreground 000000 negative background ff0000 fg ffffff
133         footer
134             background aaaaaa foreground 000000
135         text
136             background ffffff foreground 000000;
137     group select fld1, fld2, fld3, fld4, grp1, grp2, grp3 from tbl do
138         out fld1, fld2, fld3
139         by grp1 header grp1 header "group"
140             by grp2, grp3 header "total:", sum(fld2)+sum(fld3) footer count(fld2), avg(fld4);
141 end;
143 * встроенные функции: sum(), avg(), count()
144   sum() - 1 неявная переменная аггрегатор
145   count() - 1 неявная переменная счетчик
146   avg() - 2 неявные переменные: аггрегатор и счетчик
147 * для выполнения функций добавить структуру типа xsql_script_t, в которой всегда есть переменная result
148   добавить оператор return
150 summa (x, y)
151     return x + y;
152 end;
154 mmul (a, b)
155     x = 5;
156     if a > b then
157         return a + b;
158     end;
159     return a + x;
160 end;
161 * result = x; return; == return x;
163 * добавить .include <script.xsql>
164   xsql_script_t.text: char* -> str_t*
166 sum(x)
167     initialize
168         result = 0;
169     end;
170     result = result + x;
171 end;
173 count()
174     initialize
175         result = 0;
176     end;
177     result = result + 1;
178 end;
180 avg(x)
181     initialize
182         cnt = 0;
183         result = 0;
184     end;
185     finalize
186         result = result / cnt;
187     end;
188     result = result + x;
189     cnt = cnt + 1;
190 end;
192 +- контроль типов аргументов
193 +- падение при неверном описании типа параметра
194 * встроенные функции
195 * клонирование ast-дерева
198 Аггрегаты
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 ()