Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
databases:tarantool [2021/12/27 11:35] admin |
databases:tarantool [2021/12/29 10:52] (текущий) admin [Примеры] |
||
---|---|---|---|
Строка 399: | Строка 399: | ||
tarantool> | tarantool> | ||
tarantool> | tarantool> | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | Подсчет происходит в этой функции\\ | ||
+ | " | ||
+ | |||
+ | |||
+ | <code lua> | ||
+ | json= require(' | ||
+ | function sum_json_field(field_name) | ||
+ | local v, t, sum, field_value, | ||
+ | sum= 0 | ||
+ | for v, t in box.space.tester: | ||
+ | is_valid_json, | ||
+ | if is_valid_json then | ||
+ | field_value= lua_table[field_name] | ||
+ | if type(field_value)== " | ||
+ | end | ||
+ | end | ||
+ | return sum | ||
+ | end | ||
+ | </ | ||
+ | |||
+ | В двух записях намерено допущены ошибки, | ||
+ | <code lua> | ||
+ | -- Создание/ | ||
+ | box.space.tester: | ||
+ | box.schema.space.create(' | ||
+ | box.space.tester: | ||
+ | |||
+ | box.space.tester: | ||
+ | box.space.tester: | ||
+ | box.space.tester: | ||
+ | |||
+ | -- Вызов ф-ции | ||
+ | sum_json_field(" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Проверьте наличие пакета " | ||
+ | |||
+ | Создайте и скомпилируйте следующий модуль (easy.c): | ||
+ | <code c> | ||
+ | #include " | ||
+ | int easy(box_function_ctx_t *ctx, const char *args, const char *args_end) | ||
+ | { | ||
+ | printf(" | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | int easy2(box_function_ctx_t *ctx, const char *args, const char * args_end) | ||
+ | { | ||
+ | printf(" | ||
+ | return 0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Скомпилировать можно командой: | ||
+ | <code bash>$ gcc -shared -o easy.so -fPIC easy.c</ | ||
+ | |||
+ | Далее откройте клиент tarantool в интерактивном режиме: | ||
+ | <code bash> | ||
+ | box.cfg{listen=3306} | ||
+ | box.schema.space.create(' | ||
+ | box.space.capi_test: | ||
+ | net_box = require(' | ||
+ | capi_connection = net_box: | ||
+ | |||
+ | box.schema.func.create(' | ||
+ | box.schema.user.grant(' | ||
+ | capi_connection: | ||
+ | </ | ||
+ | |||
+ | Находясь в той же директории где скомпилирован модуль С, тарантул находит указанные файлы.\\ | ||
+ | Если название функции отличается он файла, то нужно указывать его: | ||
+ | <code bash> | ||
+ | box.schema.func.create(' | ||
+ | box.schema.user.grant(' | ||
+ | capi_connection: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | В основном используются API функции [[https:// | ||
+ | |||
+ | |||
+ | " | ||
+ | <code c> | ||
+ | #include "/ | ||
+ | #include "/ | ||
+ | |||
+ | int hardest(box_function_ctx_t *ctx, const char *args, const char *args_end) | ||
+ | { | ||
+ | uint32_t space_id= box_space_id_by_name(" | ||
+ | char tuple[1024]; | ||
+ | char *tuple_pointer= tuple; | ||
+ | tuple_pointer= mp_encode_array(tuple_pointer, | ||
+ | tuple_pointer= mp_encode_uint(tuple_pointer, | ||
+ | tuple_pointer= mp_encode_str(tuple_pointer, | ||
+ | int n= box_insert(space_id, | ||
+ | return n; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | После компиляции модуля выполните в терминале тарантула: | ||
+ | <code lua> | ||
+ | box.schema.func.create(' | ||
+ | box.schema.user.grant(' | ||
+ | box.schema.user.grant(' | ||
+ | capi_connection: | ||
+ | |||
+ | -- Выполнение | ||
+ | box.space.capi_test: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | Подключаемся к консоли, | ||
+ | <code bash> | ||
+ | tarantool> | ||
+ | tarantool> | ||
+ | </ | ||
+ | |||
+ | Далее выполняем команды в формате SQL | ||
+ | <code sql> | ||
+ | tarantool> | ||
+ | tarantool> | ||
+ | tarantool> | ||
+ | tarantool> | ||
+ | </ | ||
+ | Результат аналогичен использованию команд типа " | ||
+ | Здесь создается пространство " | ||
</ | </ | ||