tiny_tds 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,91 +1,190 @@
1
- ENV['RC_ARCHS'] = '' if RUBY_PLATFORM =~ /darwin/
1
+ require "mkmf"
2
+ require_relative "extconsts"
3
+
4
+ if ENV["MAINTAINER_MODE"]
5
+ warn "Maintainer mode enabled."
6
+ $CFLAGS << # standard:disable Style/GlobalVars
7
+ " -Wall" \
8
+ " -ggdb" \
9
+ " -DDEBUG" \
10
+ " -pedantic"
11
+ $LDFLAGS << # standard:disable Style/GlobalVars
12
+ " -ggdb"
13
+ end
2
14
 
3
- # :stopdoc:
15
+ if (gem_platform = with_config("cross-build"))
16
+ require "mini_portile2"
4
17
 
5
- require 'mkmf'
6
- require 'rbconfig'
7
- require_relative './extconsts'
18
+ openssl_platform = with_config("openssl-platform")
8
19
 
9
- # Shamelessly copied from nokogiri
10
- #
20
+ class BuildRecipe < MiniPortile
21
+ attr_accessor :gem_platform
11
22
 
12
- def do_help
13
- print <<HELP
14
- usage: ruby #{$0} [options]
15
- --with-freetds-dir=DIR
16
- Use the freetds library placed under DIR.
17
- HELP
18
- exit! 0
19
- end
23
+ def initialize(name, version, files)
24
+ super(name, version)
25
+ self.files = files
26
+ rootdir = File.expand_path("../../..", __FILE__)
27
+ self.target = File.join(rootdir, "ports")
28
+ self.patch_files = Dir[File.join("patches", self.name, self.version, "*.patch")].sort
29
+ end
30
+
31
+ # this will yield all ports into the same directory, making our path configuration for the linker easier
32
+ def port_path
33
+ "#{@target}/#{gem_platform}"
34
+ end
20
35
 
21
- do_help if arg_config('--help')
36
+ def cook_and_activate
37
+ checkpoint = File.join(target, "#{name}-#{version}-#{gem_platform}.installed")
22
38
 
23
- # Make sure to check the ports path for the configured host
24
- architecture = RbConfig::CONFIG['arch']
39
+ unless File.exist?(checkpoint)
40
+ cook
41
+ FileUtils.touch checkpoint
42
+ end
43
+
44
+ activate
45
+ self
46
+ end
47
+ end
25
48
 
26
- project_dir = File.expand_path("../../..", __FILE__)
27
- freetds_ports_dir = File.join(project_dir, 'ports', architecture, 'freetds', FREETDS_VERSION)
28
- freetds_ports_dir = File.expand_path(freetds_ports_dir)
49
+ openssl_recipe = BuildRecipe.new("openssl", OPENSSL_VERSION, [OPENSSL_SOURCE_URI]).tap do |recipe|
50
+ class << recipe
51
+ attr_accessor :openssl_platform
52
+
53
+ def configure
54
+ envs = []
55
+ envs << "CFLAGS=-DDSO_WIN32 -DOPENSSL_THREADS" if MiniPortile.windows?
56
+ envs << "CFLAGS=-fPIC -DOPENSSL_THREADS" if MiniPortile.linux?
57
+ execute("configure", ["env", *envs, "./Configure", openssl_platform, "threads", "-static", "CROSS_COMPILE=#{host}-", configure_prefix, "--libdir=lib"], altlog: "config.log")
58
+ end
59
+
60
+ def compile
61
+ execute("compile", "#{make_cmd} build_libs")
62
+ end
63
+
64
+ def install
65
+ execute("install", "#{make_cmd} install_dev")
66
+ end
67
+ end
68
+
69
+ recipe.gem_platform = gem_platform
70
+ recipe.openssl_platform = openssl_platform
71
+ recipe.cook_and_activate
72
+ end
29
73
 
30
- # Add all the special path searching from the original tiny_tds build
31
- # order is important here! First in, first searched.
32
- DIRS = %w(
33
- /opt/local
34
- /usr/local
35
- )
74
+ libiconv_recipe = BuildRecipe.new("libiconv", ICONV_VERSION, [ICONV_SOURCE_URI]).tap do |recipe|
75
+ recipe.configure_options << "CFLAGS=-fPIC" if MiniPortile.linux?
76
+ recipe.gem_platform = gem_platform
36
77
 
37
- if RbConfig::CONFIG['host_os'] =~ /darwin/i
38
- # Ruby below 2.7 seems to label the host CPU on Apple Silicon as aarch64
39
- # 2.7 and above print is as ARM64
40
- target_host_cpu = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7') ? 'aarch64' : 'arm64'
78
+ recipe.cook_and_activate
79
+ end
41
80
 
42
- if RbConfig::CONFIG['host_cpu'] == target_host_cpu
43
- # Homebrew on Apple Silicon installs into /opt/hombrew
44
- # https://docs.brew.sh/Installation
45
- # On Intel Macs, it is /usr/local, so no changes necessary to DIRS
46
- DIRS.unshift("/opt/homebrew")
81
+ # remove the ".la" files, otherwise libtool starts to complain when linking into FreeTDS
82
+ Dir.glob(File.join(libiconv_recipe.path, "lib", "**", "*.la")).each do |la_file|
83
+ File.delete(la_file)
47
84
  end
48
- end
49
85
 
50
- if ENV["RI_DEVKIT"] && ENV["MINGW_PREFIX"] # RubyInstaller Support
51
- DIRS.unshift(File.join(ENV["RI_DEVKIT"], ENV["MINGW_PREFIX"]))
52
- end
86
+ freetds_recipe = BuildRecipe.new("freetds", FREETDS_VERSION, [FREETDS_SOURCE_URI]).tap do |recipe|
87
+ class << recipe
88
+ def configure_defaults
89
+ [
90
+ "--host=#{@host}",
91
+ "--enable-shared",
92
+ "--disable-static",
93
+ "--disable-odbc"
94
+ ]
95
+ end
96
+ end
97
+
98
+ # i am not 100% what is going on behind the scenes
99
+ # it seems that FreeTDS build system prefers OPENSSL_CFLAGS and OPENSSL_LIBS
100
+ # but the linker still relies on LIBS and CPPFLAGS
101
+ # removing one or the other leads to build failures in any case of FreeTDS
102
+ if MiniPortile.linux?
103
+ recipe.configure_options << "CFLAGS=-fPIC"
104
+ elsif MiniPortile.windows?
105
+ recipe.configure_options << "--enable-sspi"
106
+ end
107
+
108
+ # pass an additional runtime path to the linker so defncopy and tsql can find our shared sybdb
109
+ recipe.configure_options << "LDFLAGS=-L#{openssl_recipe.path}/lib #{"-Wl,-rpath='$$ORIGIN/../lib'" if MiniPortile.linux?}"
110
+ recipe.configure_options << "LIBS=-liconv -lssl -lcrypto #{"-lwsock32 -lgdi32 -lws2_32 -lcrypt32" if MiniPortile.windows?} #{"-ldl -lpthread" if MiniPortile.linux?}"
111
+ recipe.configure_options << "CPPFLAGS=-I#{openssl_recipe.path}/include"
112
+
113
+ recipe.configure_options << "OPENSSL_CFLAGS=-L#{openssl_recipe.path}/lib"
114
+ recipe.configure_options << "OPENSSL_LIBS=-lssl -lcrypto #{"-lwsock32 -lgdi32 -lws2_32 -lcrypt32" if MiniPortile.windows?} #{"-ldl -lpthread" if MiniPortile.linux?}"
115
+
116
+ recipe.configure_options << "--with-openssl=#{openssl_recipe.path}"
117
+ recipe.configure_options << "--with-libiconv-prefix=#{libiconv_recipe.path}"
118
+ recipe.configure_options << "--sysconfdir=C:/Sites" if MiniPortile.windows?
119
+
120
+ recipe.gem_platform = gem_platform
121
+ recipe.cook_and_activate
122
+ end
53
123
 
54
- # Add the ports directory if it exists for local developer builds
55
- DIRS.unshift(freetds_ports_dir) if File.directory?(freetds_ports_dir)
124
+ # enable relative path to later load the FreeTDS shared library
125
+ $LDFLAGS << " '-Wl,-rpath=$$ORIGIN/../../../ports/#{gem_platform}/lib'" # standard:disable Style/GlobalVars
126
+
127
+ dir_config("freetds", "#{freetds_recipe.path}/include", "#{freetds_recipe.path}/lib")
128
+ else
129
+ # Make sure to check the ports path for the configured host
130
+ architecture = RbConfig::CONFIG["arch"]
131
+
132
+ project_dir = File.expand_path("../../..", __FILE__)
133
+ freetds_ports_dir = File.join(project_dir, "ports", architecture, "freetds", FREETDS_VERSION)
134
+ freetds_ports_dir = File.expand_path(freetds_ports_dir)
135
+
136
+ # Add all the special path searching from the original tiny_tds build
137
+ # order is important here! First in, first searched.
138
+ DIRS = %w[
139
+ /opt/local
140
+ /usr/local
141
+ ]
142
+
143
+ if /darwin/i.match?(RbConfig::CONFIG["host_os"])
144
+ # Ruby below 2.7 seems to label the host CPU on Apple Silicon as aarch64
145
+ # 2.7 and above print is as ARM64
146
+ target_host_cpu = (Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.7")) ? "aarch64" : "arm64"
147
+
148
+ if RbConfig::CONFIG["host_cpu"] == target_host_cpu
149
+ # Homebrew on Apple Silicon installs into /opt/hombrew
150
+ # https://docs.brew.sh/Installation
151
+ # On Intel Macs, it is /usr/local, so no changes necessary to DIRS
152
+ DIRS.unshift("/opt/homebrew")
153
+ end
154
+ end
56
155
 
57
- # Grab freetds environment variable for use by people on services like
58
- # Heroku who they can't easily use bundler config to set directories
59
- DIRS.unshift(ENV['FREETDS_DIR']) if ENV.has_key?('FREETDS_DIR')
156
+ if ENV["RI_DEVKIT"] && ENV["MINGW_PREFIX"] # RubyInstaller Support
157
+ DIRS.unshift(File.join(ENV["RI_DEVKIT"], ENV["MINGW_PREFIX"]))
158
+ end
60
159
 
61
- # Add the search paths for freetds configured above
62
- ldirs = DIRS.flat_map do |path|
63
- ldir = "#{path}/lib"
64
- [ldir, "#{ldir}/freetds"]
65
- end
160
+ # Add the ports directory if it exists for local developer builds
161
+ DIRS.unshift(freetds_ports_dir) if File.directory?(freetds_ports_dir)
66
162
 
67
- idirs = DIRS.flat_map do |path|
68
- idir = "#{path}/include"
69
- [idir, "#{idir}/freetds"]
70
- end
163
+ # Grab freetds environment variable for use by people on services like
164
+ # Heroku who they can't easily use bundler config to set directories
165
+ DIRS.unshift(ENV["FREETDS_DIR"]) if ENV.has_key?("FREETDS_DIR")
71
166
 
72
- puts "looking for freetds headers in the following directories:\n#{idirs.map{|a| " - #{a}\n"}.join}"
73
- puts "looking for freetds library in the following directories:\n#{ldirs.map{|a| " - #{a}\n"}.join}"
74
- dir_config('freetds', idirs, ldirs)
75
-
76
- have_dependencies = [
77
- find_header('sybfront.h'),
78
- find_header('sybdb.h'),
79
- find_library('sybdb', 'tdsdbopen'),
80
- find_library('sybdb', 'dbanydatecrack')
81
- ].inject(true) do |memo, current|
82
- memo && current
83
- end
167
+ # Add the search paths for freetds configured above
168
+ ldirs = DIRS.flat_map do |path|
169
+ ldir = "#{path}/lib"
170
+ [ldir, "#{ldir}/freetds"]
171
+ end
172
+
173
+ idirs = DIRS.flat_map do |path|
174
+ idir = "#{path}/include"
175
+ [idir, "#{idir}/freetds"]
176
+ end
84
177
 
85
- unless have_dependencies
86
- abort 'Failed! Do you have FreeTDS 1.0.0 or higher installed?'
178
+ puts "looking for freetds headers in the following directories:\n#{idirs.map { |a| " - #{a}\n" }.join}"
179
+ puts "looking for freetds library in the following directories:\n#{ldirs.map { |a| " - #{a}\n" }.join}"
180
+ dir_config("freetds", idirs, ldirs)
87
181
  end
88
182
 
89
- create_makefile('tiny_tds/tiny_tds')
183
+ find_header("sybfront.h") or abort "Can't find the 'sybfront.h' header"
184
+ find_header("sybdb.h") or abort "Can't find the 'sybdb.h' header"
185
+
186
+ unless have_library("sybdb", "dbanydatecrack")
187
+ abort "Failed! Do you have FreeTDS 1.0.0 or higher installed?"
188
+ end
90
189
 
91
- # :startdoc:
190
+ create_makefile("tiny_tds/tiny_tds")
@@ -1,9 +1,8 @@
1
-
2
- ICONV_VERSION = ENV['TINYTDS_ICONV_VERSION'] || "1.17"
1
+ ICONV_VERSION = ENV["TINYTDS_ICONV_VERSION"] || "1.18"
3
2
  ICONV_SOURCE_URI = "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-#{ICONV_VERSION}.tar.gz"
4
3
 
5
- OPENSSL_VERSION = ENV['TINYTDS_OPENSSL_VERSION'] || '3.4.0'
4
+ OPENSSL_VERSION = ENV["TINYTDS_OPENSSL_VERSION"] || "3.4.0"
6
5
  OPENSSL_SOURCE_URI = "https://www.openssl.org/source/openssl-#{OPENSSL_VERSION}.tar.gz"
7
6
 
8
- FREETDS_VERSION = ENV['TINYTDS_FREETDS_VERSION'] || '1.4.23'
7
+ FREETDS_VERSION = ENV["TINYTDS_FREETDS_VERSION"] || "1.4.26"
9
8
  FREETDS_SOURCE_URI = "http://www.freetds.org/files/stable/freetds-#{FREETDS_VERSION}.tar.bz2"
data/lib/tiny_tds/bin.rb CHANGED
@@ -1,23 +1,22 @@
1
- require_relative './version'
2
- require_relative './gem'
3
- require 'shellwords'
1
+ require_relative "version"
2
+ require_relative "gem"
3
+ require "shellwords"
4
4
 
5
5
  module TinyTds
6
6
  class Bin
7
-
8
7
  attr_reader :name
9
8
 
10
9
  class << self
11
10
  def exe(name, *args)
12
11
  bin = new(name)
13
- puts bin.info unless args.any? { |x| x == '-q' }
12
+ puts bin.info unless args.any? { |x| x == "-q" }
14
13
  bin.run(*args)
15
14
  end
16
15
  end
17
16
 
18
17
  def initialize(name)
19
18
  @root = Gem.root_path
20
- @exts = (ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']) | ['.exe']
19
+ @exts = (ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]) | [".exe"]
21
20
 
22
21
  @name = name
23
22
  @binstub = find_bin
@@ -33,7 +32,7 @@ module TinyTds
33
32
  end
34
33
 
35
34
  def path
36
- @path ||= @exefile && File.exist?(@exefile) ? @exefile : which
35
+ @path ||= (@exefile && File.exist?(@exefile)) ? @exefile : which
37
36
  end
38
37
 
39
38
  def info
@@ -43,26 +42,26 @@ module TinyTds
43
42
  private
44
43
 
45
44
  def search_paths
46
- ENV['PATH'].split File::PATH_SEPARATOR
45
+ ENV["PATH"].split File::PATH_SEPARATOR
47
46
  end
48
47
 
49
48
  def with_ports_paths
50
- old_path = ENV['PATH']
49
+ old_path = ENV["PATH"]
51
50
 
52
51
  begin
53
- ENV['PATH'] = [
52
+ ENV["PATH"] = [
54
53
  Gem.ports_bin_paths,
55
54
  old_path
56
55
  ].flatten.join File::PATH_SEPARATOR
57
56
 
58
57
  yield if block_given?
59
58
  ensure
60
- ENV['PATH'] = old_path
59
+ ENV["PATH"] = old_path
61
60
  end
62
61
  end
63
62
 
64
63
  def find_bin
65
- File.join @root, 'bin', name
64
+ File.join @root, "bin", name
66
65
  end
67
66
 
68
67
  def find_exe
@@ -81,24 +80,11 @@ module TinyTds
81
80
  exe = File.expand_path File.join(path, "#{name}#{ext}"), @root
82
81
  next if exe == @binstub
83
82
  next unless File.executable?(exe)
84
- next unless binary?(exe)
83
+
85
84
  return exe
86
85
  end
87
86
  end
88
87
  nil
89
88
  end
90
-
91
- # Implementation directly copied from ptools.
92
- # https://github.com/djberg96/ptools
93
- # https://opensource.org/licenses/Artistic-2.0
94
- #
95
- def binary?(file)
96
- bytes = File.stat(file).blksize
97
- return false unless bytes
98
- bytes = 4096 if bytes > 4096
99
- s = (File.read(file, bytes) || '')
100
- s = s.encode('US-ASCII', undef: :replace).split(//)
101
- ((s.size - s.grep(' '..'~').size) / s.size.to_f) > 0.30
102
- end
103
89
  end
104
90
  end
@@ -1,6 +1,5 @@
1
1
  module TinyTds
2
2
  class Client
3
-
4
3
  @default_query_options = {
5
4
  as: :hash,
6
5
  symbolize_keys: false,
@@ -13,7 +12,6 @@ module TinyTds
13
12
  attr_reader :message_handler
14
13
 
15
14
  class << self
16
-
17
15
  attr_reader :default_query_options
18
16
 
19
17
  # Most, if not all, iconv encoding names can be found by ruby. Just in case, you can
@@ -27,7 +25,6 @@ module TinyTds
27
25
  def local_offset
28
26
  ::Time.local(2010).utc_offset.to_r / 86_400
29
27
  end
30
-
31
28
  end
32
29
 
33
30
  # rubocop:disable Metrics/AbcSize
@@ -36,23 +33,23 @@ module TinyTds
36
33
  # rubocop:disable Metrics/PerceivedComplexity
37
34
  def initialize(opts = {})
38
35
  if opts[:dataserver].to_s.empty? && opts[:host].to_s.empty?
39
- raise ArgumentError, 'missing :host option if no :dataserver given'
36
+ raise ArgumentError, "missing :host option if no :dataserver given"
40
37
  end
41
38
 
42
39
  @message_handler = opts[:message_handler]
43
40
  if @message_handler && !@message_handler.respond_to?(:call)
44
- raise ArgumentError, ':message_handler must implement `call` (eg, a Proc or a Method)'
41
+ raise ArgumentError, ":message_handler must implement `call` (eg, a Proc or a Method)"
45
42
  end
46
43
 
47
44
  opts[:username] = parse_username(opts)
48
45
  @query_options = self.class.default_query_options.dup
49
- opts[:password] = opts[:password].to_s if opts[:password] && opts[:password].to_s.strip != ''
50
- opts[:appname] ||= 'TinyTds'
46
+ opts[:password] = opts[:password].to_s if opts[:password] && opts[:password].to_s.strip != ""
47
+ opts[:appname] ||= "TinyTds"
51
48
  opts[:tds_version] = tds_versions_setter(opts)
52
49
  opts[:use_utf16] = opts[:use_utf16].nil? || ["true", "1", "yes"].include?(opts[:use_utf16].to_s)
53
50
  opts[:login_timeout] ||= 60
54
51
  opts[:timeout] ||= 5
55
- opts[:encoding] = opts[:encoding].nil? || opts[:encoding].casecmp('utf8').zero? ? 'UTF-8' : opts[:encoding].upcase
52
+ opts[:encoding] = (opts[:encoding].nil? || opts[:encoding].casecmp("utf8").zero?) ? "UTF-8" : opts[:encoding].upcase
56
53
  opts[:port] ||= 1433
57
54
  opts[:dataserver] = "#{opts[:host]}:#{opts[:port]}" if opts[:dataserver].to_s.empty?
58
55
  forced_integer_keys = [:login_timeout, :port, :timeout]
@@ -79,14 +76,14 @@ module TinyTds
79
76
  host = opts[:host]
80
77
  username = opts[:username]
81
78
  return username if username.nil? || !opts[:azure]
82
- return username if username.include?('@') && !username.include?('database.windows.net')
83
- user, domain = username.split('@')
79
+ return username if username.include?("@") && !username.include?("database.windows.net")
80
+ user, domain = username.split("@")
84
81
  domain ||= host
85
- "#{user}@#{domain.split('.').first}"
82
+ "#{user}@#{domain.split(".").first}"
86
83
  end
87
84
 
88
85
  def tds_versions_setter(opts = {})
89
- v = opts[:tds_version] || ENV['TDSVER'] || '7.3'
86
+ v = opts[:tds_version] || ENV["TDSVER"] || "7.3"
90
87
  TDS_VERSIONS_SETTERS[v.to_s]
91
88
  end
92
89
 
@@ -94,22 +91,22 @@ module TinyTds
94
91
  # DBVERSION_xxx are used with dbsetversion()
95
92
  #
96
93
  TDS_VERSIONS_SETTERS = {
97
- 'unknown' => 0,
98
- '46' => 1,
99
- '100' => 2,
100
- '42' => 3,
101
- '70' => 4,
102
- '7.0' => 4,
103
- '71' => 5,
104
- '7.1' => 5,
105
- '80' => 5,
106
- '8.0' => 5,
107
- '72' => 6,
108
- '7.2' => 6,
109
- '90' => 6,
110
- '9.0' => 6,
111
- '73' => 7,
112
- '7.3' => 7
94
+ "unknown" => 0,
95
+ "46" => 1,
96
+ "100" => 2,
97
+ "42" => 3,
98
+ "70" => 4,
99
+ "7.0" => 4,
100
+ "71" => 5,
101
+ "7.1" => 5,
102
+ "80" => 5,
103
+ "8.0" => 5,
104
+ "72" => 6,
105
+ "7.2" => 6,
106
+ "90" => 6,
107
+ "9.0" => 6,
108
+ "73" => 7,
109
+ "7.3" => 7
113
110
  }.freeze
114
111
 
115
112
  # From sybdb.h comments:
@@ -117,20 +114,19 @@ module TinyTds
117
114
  # The integer values of the constants are poorly chosen.
118
115
  #
119
116
  TDS_VERSIONS_GETTERS = {
120
- 0 => { name: 'DBTDS_UNKNOWN', description: 'Unknown' },
121
- 1 => { name: 'DBTDS_2_0', description: 'Pre 4.0 SQL Server' },
122
- 2 => { name: 'DBTDS_3_4', description: 'Microsoft SQL Server (3.0)' },
123
- 3 => { name: 'DBTDS_4_0', description: '4.0 SQL Server' },
124
- 4 => { name: 'DBTDS_4_2', description: '4.2 SQL Server' },
125
- 5 => { name: 'DBTDS_4_6', description: '2.0 OpenServer and 4.6 SQL Server.' },
126
- 6 => { name: 'DBTDS_4_9_5', description: '4.9.5 (NCR) SQL Server' },
127
- 7 => { name: 'DBTDS_5_0', description: '5.0 SQL Server' },
128
- 8 => { name: 'DBTDS_7_0', description: 'Microsoft SQL Server 7.0' },
129
- 9 => { name: 'DBTDS_7_1/DBTDS_8_0', description: 'Microsoft SQL Server 2000' },
130
- 10 => { name: 'DBTDS_7_2/DBTDS_9_0', description: 'Microsoft SQL Server 2005' },
131
- 11 => { name: 'DBTDS_7_3', description: 'Microsoft SQL Server 2008' },
132
- 12 => { name: 'DBTDS_7_4', description: 'Microsoft SQL Server 2012/2014' }
117
+ 0 => {name: "DBTDS_UNKNOWN", description: "Unknown"},
118
+ 1 => {name: "DBTDS_2_0", description: "Pre 4.0 SQL Server"},
119
+ 2 => {name: "DBTDS_3_4", description: "Microsoft SQL Server (3.0)"},
120
+ 3 => {name: "DBTDS_4_0", description: "4.0 SQL Server"},
121
+ 4 => {name: "DBTDS_4_2", description: "4.2 SQL Server"},
122
+ 5 => {name: "DBTDS_4_6", description: "2.0 OpenServer and 4.6 SQL Server."},
123
+ 6 => {name: "DBTDS_4_9_5", description: "4.9.5 (NCR) SQL Server"},
124
+ 7 => {name: "DBTDS_5_0", description: "5.0 SQL Server"},
125
+ 8 => {name: "DBTDS_7_0", description: "Microsoft SQL Server 7.0"},
126
+ 9 => {name: "DBTDS_7_1/DBTDS_8_0", description: "Microsoft SQL Server 2000"},
127
+ 10 => {name: "DBTDS_7_2/DBTDS_9_0", description: "Microsoft SQL Server 2005"},
128
+ 11 => {name: "DBTDS_7_3", description: "Microsoft SQL Server 2008"},
129
+ 12 => {name: "DBTDS_7_4", description: "Microsoft SQL Server 2012/2014"}
133
130
  }.freeze
134
-
135
131
  end
136
132
  end
@@ -1,6 +1,5 @@
1
1
  module TinyTds
2
2
  class Error < StandardError
3
-
4
3
  attr_accessor :source, :severity, :db_error_number, :os_error_number
5
4
 
6
5
  def initialize(message)
@@ -9,6 +8,5 @@ module TinyTds
9
8
  @db_error_number = nil
10
9
  @os_error_number = nil
11
10
  end
12
-
13
11
  end
14
12
  end
data/lib/tiny_tds/gem.rb CHANGED
@@ -1,26 +1,22 @@
1
- require 'rbconfig'
1
+ require "rbconfig"
2
2
 
3
3
  module TinyTds
4
4
  module Gem
5
5
  class << self
6
6
  def root_path
7
- File.expand_path '../../..', __FILE__
7
+ File.expand_path "../../..", __FILE__
8
8
  end
9
9
 
10
10
  def ports_root_path
11
- File.join(root_path,'ports')
11
+ File.join(root_path, "ports")
12
12
  end
13
13
 
14
14
  def ports_bin_paths
15
- Dir.glob(File.join(ports_root_path,ports_host,'**','bin'))
15
+ Dir.glob(File.join(ports_root_path, "**", "bin"))
16
16
  end
17
17
 
18
18
  def ports_lib_paths
19
- Dir.glob(File.join(ports_root_path,ports_host,'**','lib'))
20
- end
21
-
22
- def ports_host
23
- RbConfig::CONFIG["arch"]
19
+ Dir.glob(File.join(ports_root_path, "**", "lib"))
24
20
  end
25
21
  end
26
22
  end
@@ -1,7 +1,5 @@
1
1
  module TinyTds
2
2
  class Result
3
-
4
3
  include Enumerable
5
-
6
4
  end
7
5
  end
@@ -1,3 +1,3 @@
1
1
  module TinyTds
2
- VERSION = File.read(File.expand_path('../../../VERSION', __FILE__)).chomp
2
+ VERSION = File.read(File.expand_path("../../../VERSION", __FILE__)).chomp
3
3
  end