Size: a a a

2020 November 30

M

MAPC in Tarantool
там 7 полей из них 2 стринги  остальные integer
источник

M

MAPC in Tarantool
MAPC
там 7 полей из них 2 стринги  остальные integer
not null только один integer
источник

©

©triod in Tarantool
Roman Tsisyk
Лечение перейти на vscode
Это проблема java фреймворка.
источник

AK

Alexey Kuzin in Tarantool
Судя по кодам мсжпака, у вас стринг прилетает в инт
источник

AK

Alexey Kuzin in Tarantool
MAPC
not null только один integer
источник

AK

Alexey Kuzin in Tarantool
Проверьте порядок полей, не пропускаются ли у вас какие-то из-за нулов
источник

M

MAPC in Tarantool
Там массив интерфейсов длиной всегда 7 элементов приходит. Нулы в нем есть, не пропускаются
источник

PN

Pavel Nakhaev in Tarantool
Alexey Kuzin
Индексов нет на это поле?
Индексов нет
источник

AK

Alexey Kuzin in Tarantool
MAPC
Там массив интерфейсов длиной всегда 7 элементов приходит. Нулы в нем есть, не пропускаются
Это на стороне гошки, а из хранимки данные правильно вылетают?
источник

M

MAPC in Tarantool
массив интерфейсов на стороне Go - да
источник

M

MAPC in Tarantool
из хп все правильно приходит
источник

M

MAPC in Tarantool
если бы приходило неправильно
источник

M

MAPC in Tarantool
то проблема декодирования была бы всегда
источник

AK

Alexey Kuzin in Tarantool
Покажите код хранимки и код на go, который получает результат
источник

M

MAPC in Tarantool
function select_few_rec_by_primary(array)
   out = {}
   for i = 1, #array do
       t = box.space.first_space:select{array[i]}
       if #t > 0 then
           t = t[1]:totable()
           p = box.space.second_space:select{t[2]}
           if #p > 0 then
               t[#t+1] = p[1][3]
           else
               t[#t+1] = nil
           end
           out[#out+1] = t
       end
       fiber.yield()
   end

   return out
end

А это гошный кусок
func (t tar) Get(keys []int64) ([]model.ActualInfo, error) {
 actualInfo := make([]model.ActualInfo, 0, len(keys))
 fut := datasource.Tarantool.CallAsync("select_few_rec_by_primary", []interface{}{keys})
 err := fut.GetTyped(&actualInfo)

 if err != nil {
   log.Println(err)
   tarantoolError, ok := err.(tarantool.ClientError)
   if !ok {
     return nil, err
   }

   if tarantoolError.Code == tarantool.ErrConnectionClosed {
     return nil, datasource.ReconnectTarantool(datasource.Tarantool, 1)
   }
 }

 return actualInfo, nil
}
источник

M

MAPC in Tarantool
хранимка блевотная кстати, джойн максимально ублюдским способом сделан )
источник

AK

Alexey Kuzin in Tarantool
Это IN + JOIN?
источник

M

MAPC in Tarantool
select * from first_table as f
left join second_table as s on f.id = s.f_id where f.id in(1,2,3,4,5,6)
источник

M

MAPC in Tarantool
sql-ный эквивалент
источник

P

Pavel in Tarantool
MAPC
function select_few_rec_by_primary(array)
   out = {}
   for i = 1, #array do
       t = box.space.first_space:select{array[i]}
       if #t > 0 then
           t = t[1]:totable()
           p = box.space.second_space:select{t[2]}
           if #p > 0 then
               t[#t+1] = p[1][3]
           else
               t[#t+1] = nil
           end
           out[#out+1] = t
       end
       fiber.yield()
   end

   return out
end

А это гошный кусок
func (t tar) Get(keys []int64) ([]model.ActualInfo, error) {
 actualInfo := make([]model.ActualInfo, 0, len(keys))
 fut := datasource.Tarantool.CallAsync("select_few_rec_by_primary", []interface{}{keys})
 err := fut.GetTyped(&actualInfo)

 if err != nil {
   log.Println(err)
   tarantoolError, ok := err.(tarantool.ClientError)
   if !ok {
     return nil, err
   }

   if tarantoolError.Code == tarantool.ErrConnectionClosed {
     return nil, datasource.ReconnectTarantool(datasource.Tarantool, 1)
   }
 }

 return actualInfo, nil
}
actualInfo := make([]model.ActualInfo, 0, len(keys))

По-моему из call результат возвращается в массиве, т.е вам нужно его распаковывать в [][]model.ActualInfo
источник