Module: Sequel::JDBC::SQLServer::DatabaseMethods::MetadataDatasetMethods

Defined in:
lib/sequel/adapters/jdbc/sqlserver.rb

Overview

Work around a bug in SQL Server JDBC Driver 3.0, where the metadata for the getColumns result set specifies an incorrect type for the IS_AUTOINCREMENT column. The column is a string, but the type is specified as a short. This causes getObject() to throw a com.microsoft.sqlserver.jdbc.SQLServerException: “The conversion from char to SMALLINT is unsupported.” Using getString() rather than getObject() for this column avoids the problem. Reference: social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/20df12f3-d1bf-4526-9daa-239a83a8e435

Instance Method Summary collapse

Instance Method Details

#process_result_set_convert(cols, result, rn) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/sequel/adapters/jdbc/sqlserver.rb', line 21

def process_result_set_convert(cols, result, rn)
  while result.next
    row = {}
    cols.each do |n, i, p|
      v = (n == :is_autoincrement ? result.getString(i) : result.getObject(i))
      row[n] = if v
        if p
          p.call(v)
        elsif p.nil?
          cols[i-1][2] = p = convert_type_proc(v)
          if p
            p.call(v)
          else
            v
          end
        else
          v
        end
      else
        v
      end
    end
    row.delete(rn) if rn
    yield row
  end
end

#process_result_set_no_convert(cols, result, rn) ⇒ Object



48
49
50
51
52
53
54
55
56
57
# File 'lib/sequel/adapters/jdbc/sqlserver.rb', line 48

def process_result_set_no_convert(cols, result, rn)
  while result.next
    row = {}
    cols.each do |n, i|
      row[n] = (n == :is_autoincrement ? result.getString(i) : result.getObject(i))
    end
    row.delete(rn) if rn
    yield row
  end
end