Ruby, ошибка сегментации tiny_tds (дерево сборки)

require 'tiny_tds'

def client 
  client = TinyTds::Client.new username: 'user', password: 'pass', host: '192.168.4.4'
  client.execute('use database').do
  client
end

def services(id)
  out = []
  client.execute('exec GetServiceByServiceGroup @ServiceGroup = %s' % id).each(:symbolize_keys => true) do |s|
    out << {:value => s[:ServiceName] + ' <i>(' + s[:ServiceID].to_s + ')</i>',
      :child => operational_services(s[:ServiceID])}
  end
  out
end

def operational_services(id)
  out = []
  client.execute('exec GetOperationalServiceByService @Service = %s' % id).each(:symbolize_keys => true) do |os|
    out << {:value => os[:OperationalServiceName] + ' <i>(' + os[:OperationalServiceID].to_s + ')<i>'}
  end
  out
end

out = []

client.execute('exec GetServiceGroupByDirection @Direction = 50').each(:symbolize_keys => true) do |service_group|
  out << {:value => service_group[:ServiceGroupName] + ' <i>(' + service_group[:ServiceGroupID].to_s + ')</i>',
    :child => services(service_group[:ServiceGroupID])}
end

out

я принимаю ошибку:

test.irb:28: [BUG] Segmentation fault at 0x0000000000000e
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]

Я хочу построить дерево с уровнем дерева из базы данных, но tiny_tds возвращает мне sg =( почему? Я пишу функцию «клиент», чтобы очищать другое соединение, в то время как текущие возвращаемые значения. В противном случае tiny_tds говорит «Попытка инициировать новую операцию Adaptive Server с ожидаемыми результатами (TinyTds::Ошибка)'

где я ошибаюсь?


person Vladimir Kovalev    schedule 12.07.2016    source источник


Ответы (1)


не знаю почему, но эти работают

def client 
  if @client.nil?
    @client = TinyTds::Client.new username: 'user', password: 'pass', host: '192.168.4.4'
    @client.execute('use database').do
    def @client.execute(sql)
      puts sql
      super(sql).each(:symbolize_keys => true)
    end
  end
  @client
end
person Vladimir Kovalev    schedule 12.07.2016