Size: a a a

2020 June 07

EL

Eugene Leonovich in Tarantool
sql же с версии 2.0
источник

МЖ

Михаил Желудков... in Tarantool
взял текущий stable
источник

EL

Eugene Leonovich in Tarantool
prepare, кстати, на версии ниже 2.3 юзать я бы не рекомендовал, он там поломан
источник

МЖ

Михаил Желудков... in Tarantool
поэтому prepare настоящего и нет пока
источник

EL

Eugene Leonovich in Tarantool
prepare_sql это ненастоящий?
источник

МЖ

Михаил Желудков... in Tarantool
нет, это просто dsl
источник

МЖ

Михаил Желудков... in Tarantool
для 2.3 будет prepare_statement видимо
источник

EL

Eugene Leonovich in Tarantool
.prepare_sql("select * from TABLE1 where COLUMN1=?")
   .bind(1)
это в итоге в строку превращается " select ... COLUMN1=1"?
источник

МЖ

Михаил Желудков... in Tarantool
нет, в протоколе тарантула есть команда EXECUTE = 0x0b,
в самом запросе на сервер уходит исходная строка sql  (с символами ?) + упакованый в msgpack массив параметров
источник

МЖ

Михаил Желудков... in Tarantool
вот тут подробнее
источник

МЖ

Михаил Желудков... in Tarantool
источник

EL

Eugene Leonovich in Tarantool
да, точно
источник
2020 June 08

D

Dmitry in Tarantool
Здравствуйте! Пытаюсь подружить tarantool-nginx-upstream с апи на картридже. Все примеры, что я нашел, обычные приложения на тарантуле, а для картриджа не нашел примеры.  В кастомной роли API картриджа добавил функцию ендпоинт. По логам nginx транслирует в приложение, но оно не отвечает.
nginx_1              | 2020/06/08 05:15:59 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: , request: "GET /tnt_api?arg1=1 HTTP/1.1", upstream: "tnt://[::1]:8088", host: "127.0.0.1"

Кто-нибудь настраивал интеграцию картриджа и tarantool-nginx?
источник

D

Dmitry in Tarantool
вот пример конфига nginx:
    location /tnt_api {
     # REST mode on
     tnt_http_methods get; # or all

     # Pass http headers and uri
     tnt_pass_http_request on;

     # Module on
     tnt_pass cloud-gateway;
   }

Вот сам код функции:
local function tnt_api(req)
   log.warn(req)
   return {"ok"}
end
источник

D

Dmitry in Tarantool
получается эти функции-эндпоинты не доступны снаружи.
источник

AK

Alexey Kuzin in Tarantool
Функцию надо заэкспортить в роли. Как вы делаете?
источник

D

Dmitry in Tarantool
в функции init() роли я добавил такие строки:
    box.schema.func.create('tnt_api', {if_not_exists = true})

   rawset(_G, 'tnt_api', tnt_api)

а также в блоке return роли:
return {
   role_name = 'api',
   init = init,
   utils = {
       tnt_api = tnt_api,
   },
...
}
источник

AK

Alexey Kuzin in Tarantool
Также на функцию надо выдать гранты.
Руками из консоли Тарантула получается вызвать функцию через нетбокс?
источник

D

Dmitry in Tarantool
Alexey Kuzin
Также на функцию надо выдать гранты.
Руками из консоли Тарантула получается вызвать функцию через нетбокс?
я  добаил грант execute на функцию
local function init(opts)
  if opts.is_master then
       box.schema.user.grant('guest',
           'read,write',
           'universe',
           nil, { if_not_exists = true }
       )
       box.schema.func.create('tnt_api', {if_not_exists = true})
       box.schema.user.grant('guest', 'execute', 'function', 'tnt_api')
   end  

   rawset(_G, 'tnt_api', tnt_api)
...

но все равно не доступна
источник

AK

Alexey Kuzin in Tarantool
Dmitry
я  добаил грант execute на функцию
local function init(opts)
  if opts.is_master then
       box.schema.user.grant('guest',
           'read,write',
           'universe',
           nil, { if_not_exists = true }
       )
       box.schema.func.create('tnt_api', {if_not_exists = true})
       box.schema.user.grant('guest', 'execute', 'function', 'tnt_api')
   end  

   rawset(_G, 'tnt_api', tnt_api)
...

но все равно не доступна
источник