Инструменты пользователя

Инструменты сайта


databases:tarantool

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
databases:tarantool [2021/12/27 12:33]
admin
databases:tarantool [2021/12/29 10:52] (текущий)
admin [Примеры]
Строка 440: Строка 440:
 sum_json_field("Quantity") sum_json_field("Quantity")
 </code> </code>
 +</details>
 +
 +
 +
 +<details>
 +<summary> :!: **Хранимые процедуры на С** </summary>
 +Проверьте наличие пакета "tarantool-dev"\\
 +
 +Создайте и скомпилируйте следующий модуль (easy.c):
 +<code c>
 +#include "module.h"
 +int easy(box_function_ctx_t *ctx, const char *args, const char *args_end)
 +{
 +        printf("hello world\n");
 +        return 0;
 +}
 +
 +int easy2(box_function_ctx_t *ctx, const char *args, const char * args_end)
 +{
 +        printf("hello world -- easy2\n");
 +        return 0;
 +}
 +</code>
 +
 +Скомпилировать можно командой:
 +<code bash>$ gcc -shared -o easy.so -fPIC easy.c</code>
 +
 +Далее откройте клиент tarantool в интерактивном режиме:
 +<code bash>
 +box.cfg{listen=3306}
 +box.schema.space.create('capi_test')
 +box.space.capi_test:create_index('primary')
 +net_box = require('net.box')
 +capi_connection = net_box:new(3306)
 +
 +box.schema.func.create('easy', {language = 'C'})
 +box.schema.user.grant('guest', 'execute', 'function', 'easy')
 +capi_connection:call('easy')
 +</code>
 +
 +Находясь в той же директории где скомпилирован модуль С, тарантул находит указанные файлы.\\
 +Если название функции отличается он файла, то нужно указывать его:
 +<code bash>
 +box.schema.func.create('easy.easy2', {language = 'C'})
 +box.schema.user.grant('guest', 'execute', 'function', 'easy.easy2')
 +capi_connection:call('easy.easy2')
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary> :!: **Еще пример использования С** </summary>
 +
 +В основном используются API функции [[https://github.com/tarantool/msgpuck|модуля msgpuck]]\\
 +
 +
 +"hardest.c"
 +<code c>
 +#include "/usr/include/tarantool/module.h"
 +#include "/var/msgpuck/msgpuck.h"
 +
 +int hardest(box_function_ctx_t *ctx, const char *args, const char *args_end)
 +{
 +        uint32_t space_id= box_space_id_by_name("capi_test", strlen("capi_test"));
 +        char tuple[1024];
 +        char *tuple_pointer= tuple;
 +        tuple_pointer= mp_encode_array(tuple_pointer, 2);
 +        tuple_pointer= mp_encode_uint(tuple_pointer, 10000);
 +        tuple_pointer= mp_encode_str(tuple_pointer, "String 2", 8);
 +        int n= box_insert(space_id, tuple, tuple_pointer, NULL);
 +        return n;
 +}
 +</code>
 +
 +После компиляции модуля выполните в терминале тарантула:
 +<code lua>
 +box.schema.func.create('hardest', {language = "C"})
 +box.schema.user.grant('guest', 'execute', 'function', 'hardest')
 +box.schema.user.grant('guest', 'read,write', 'space', 'capi_test')
 +capi_connection:call('hardest')
 +
 +-- Выполнение
 +box.space.capi_test:select()
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary> :!: **Использование SQL** </summary>
 +
 +Подключаемся к консоли, двумя командами задаем язык и разделитель команд:\\
 +<code bash>
 +tarantool> \set language sql
 +tarantool> \set delimiter ;
 +</code>
 +
 +Далее выполняем команды в формате SQL
 +<code sql>
 +tarantool> create table table1 (column1 integer primary key, column2 varchar(100));
 +tarantool> insert into table1 values (1, 'A'); insert into table1 values (2, 'B'); 
 +tarantool> update table1 set column2='AB' where column1='2';
 +tarantool> select * from table1;
 +</code>
 +Результат аналогичен использованию команд типа "box.space..."\\
 +Здесь создается пространство "table1", и вставка пары кортежей (записей).\\
 </details> </details>
  
databases/tarantool.1640608406.txt.gz · Последнее изменение: 2021/12/27 12:33 — admin