vm_tiny_tds 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +20 -0
- data/.gitattributes +1 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +31 -0
- data/.travis.yml +24 -0
- data/BACKERS.md +32 -0
- data/CHANGELOG.md +255 -0
- data/CODE_OF_CONDUCT.md +31 -0
- data/Gemfile +9 -0
- data/ISSUE_TEMPLATE.md +38 -0
- data/MIT-LICENSE +23 -0
- data/README.md +504 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/appveyor.yml +51 -0
- data/bin/defncopy-ttds +3 -0
- data/bin/tsql-ttds +3 -0
- data/exe/.keep +0 -0
- data/ext/tiny_tds/client.c +451 -0
- data/ext/tiny_tds/client.h +51 -0
- data/ext/tiny_tds/extconf.rb +69 -0
- data/ext/tiny_tds/extconsts.rb +15 -0
- data/ext/tiny_tds/result.c +619 -0
- data/ext/tiny_tds/result.h +32 -0
- data/ext/tiny_tds/tiny_tds_ext.c +12 -0
- data/ext/tiny_tds/tiny_tds_ext.h +17 -0
- data/lib/tiny_tds/bin.rb +104 -0
- data/lib/tiny_tds/client.rb +136 -0
- data/lib/tiny_tds/error.rb +14 -0
- data/lib/tiny_tds/gem.rb +32 -0
- data/lib/tiny_tds/result.rb +7 -0
- data/lib/tiny_tds/version.rb +3 -0
- data/lib/tiny_tds.rb +61 -0
- data/patches/freetds/1.00.27/0001-mingw_missing_inet_pton.diff +34 -0
- data/patches/freetds/1.00.27/0002-Don-t-use-MSYS2-file-libws2_32.diff +28 -0
- data/patches/libiconv/1.14/1-avoid-gets-error.patch +17 -0
- data/tasks/native_gem.rake +14 -0
- data/tasks/package.rake +8 -0
- data/tasks/ports/freetds.rb +37 -0
- data/tasks/ports/libiconv.rb +43 -0
- data/tasks/ports/openssl.rb +78 -0
- data/tasks/ports/recipe.rb +52 -0
- data/tasks/ports.rake +87 -0
- data/tasks/test.rake +9 -0
- data/test/appveyor/dbsetup.ps1 +27 -0
- data/test/appveyor/dbsetup.sql +9 -0
- data/test/benchmark/query.rb +77 -0
- data/test/benchmark/query_odbc.rb +106 -0
- data/test/benchmark/query_tinytds.rb +126 -0
- data/test/bin/install-freetds.sh +20 -0
- data/test/bin/install-openssl.sh +18 -0
- data/test/bin/setup.sh +19 -0
- data/test/client_test.rb +230 -0
- data/test/gem_test.rb +179 -0
- data/test/result_test.rb +773 -0
- data/test/schema/1px.gif +0 -0
- data/test/schema/sqlserver_2000.sql +140 -0
- data/test/schema/sqlserver_2005.sql +140 -0
- data/test/schema/sqlserver_2008.sql +140 -0
- data/test/schema/sqlserver_2014.sql +140 -0
- data/test/schema/sqlserver_2016.sql +140 -0
- data/test/schema/sqlserver_azure.sql +140 -0
- data/test/schema/sybase_ase.sql +138 -0
- data/test/schema_test.rb +443 -0
- data/test/test_helper.rb +217 -0
- data/test/thread_test.rb +98 -0
- data/tiny_tds.gemspec +29 -0
- metadata +225 -0
data/test/thread_test.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'logger'
|
3
|
+
require 'benchmark'
|
4
|
+
|
5
|
+
class ThreadTest < TinyTds::TestCase
|
6
|
+
|
7
|
+
describe 'Threaded SELECT queries' do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@logger = Logger.new $stdout
|
11
|
+
@logger.level = Logger::WARN
|
12
|
+
@poolsize = 4
|
13
|
+
@numthreads = 10
|
14
|
+
@query = "waitfor delay '00:00:01'"
|
15
|
+
@pool = ConnectionPool.new(:size => @poolsize, :timeout => 5) { new_connection }
|
16
|
+
end
|
17
|
+
|
18
|
+
after do
|
19
|
+
@pool.shutdown { |c| c.close }
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should finish faster in parallel' do
|
23
|
+
skip if sqlserver_azure?
|
24
|
+
x = Benchmark.realtime do
|
25
|
+
threads = []
|
26
|
+
@numthreads.times do |i|
|
27
|
+
start = Time.new
|
28
|
+
threads << Thread.new do
|
29
|
+
ts = Time.new
|
30
|
+
@pool.with { |c| c.execute(@query).do }
|
31
|
+
te = Time.new
|
32
|
+
@logger.info "Thread #{i} finished in #{te - ts} thread seconds, #{te - start} real seconds"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
threads.each { |t| t.join }
|
36
|
+
end
|
37
|
+
assert x < @numthreads, "#{x} is not faster than #{@numthreads} seconds"
|
38
|
+
mintime = (1.0*@numthreads/@poolsize).ceil
|
39
|
+
@logger.info "#{@numthreads} queries on #{@poolsize} threads: #{x} sec. Minimum time: #{mintime} sec."
|
40
|
+
assert x > mintime, "#{x} is not slower than #{mintime} seconds"
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should not crash on error in parallel' do
|
44
|
+
skip if sqlserver_azure?
|
45
|
+
threads = []
|
46
|
+
@numthreads.times do |i|
|
47
|
+
threads << Thread.new do
|
48
|
+
@pool.with do |client|
|
49
|
+
begin
|
50
|
+
result = client.execute "select dbname()"
|
51
|
+
result.each { |r| puts r }
|
52
|
+
rescue Exception => e
|
53
|
+
# We are throwing an error on purpose here since 0.6.1 would
|
54
|
+
# segfault on errors thrown in threads
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
threads.each { |t| t.join }
|
60
|
+
assert true
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should cancel when hitting timeout in thread' do
|
64
|
+
exception = false
|
65
|
+
|
66
|
+
thread = Thread.new do
|
67
|
+
@pool.with do |client|
|
68
|
+
begin
|
69
|
+
delay = ('0' + (connection_timeout + 2).to_s)[-2,2] # Two seconds longer than default.
|
70
|
+
result = client.execute "waitfor delay '00:00:#{delay}'; select db_name()"
|
71
|
+
result.each { |r| puts r }
|
72
|
+
rescue TinyTds::Error => e
|
73
|
+
if e.message == 'Adaptive Server connection timed out'
|
74
|
+
exception = true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
timer_thread = Thread.new do
|
81
|
+
# Sleep until after the timeout should have been reached
|
82
|
+
sleep(connection_timeout+2)
|
83
|
+
if not exception
|
84
|
+
thread.kill
|
85
|
+
raise "Timeout passed without query timing out"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
thread.join
|
90
|
+
timer_thread.join
|
91
|
+
|
92
|
+
assert exception
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
data/tiny_tds.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'tiny_tds/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'vm_tiny_tds'
|
7
|
+
s.version = TinyTds::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Ken Collins', 'Erik Bryn', 'Will Bond']
|
10
|
+
s.email = ['ajithks@vmware.com']
|
11
|
+
s.homepage = 'https://github.com/Ajithprojs/tiny_tds'
|
12
|
+
s.summary = 'TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library.'
|
13
|
+
s.description = 'TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library. Developed for the ActiveRecord SQL Server adapter.'
|
14
|
+
s.files = `git ls-files`.split("\n") + Dir.glob('exe/*')
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
17
|
+
s.require_paths = ['lib']
|
18
|
+
s.rdoc_options = ['--charset=UTF-8']
|
19
|
+
s.extensions = ['ext/tiny_tds/extconf.rb']
|
20
|
+
s.license = 'MIT'
|
21
|
+
s.required_ruby_version = '>= 2.0.0'
|
22
|
+
s.metadata['msys2_mingw_dependencies'] = 'freetds'
|
23
|
+
s.add_development_dependency 'mini_portile2', '~> 2.0'
|
24
|
+
s.add_development_dependency 'rake', '~> 10.4'
|
25
|
+
s.add_development_dependency 'rake-compiler', '~> 1.0'
|
26
|
+
s.add_development_dependency 'rake-compiler-dock', '~> 0.6.3'
|
27
|
+
s.add_development_dependency 'minitest', '~> 5.6'
|
28
|
+
s.add_development_dependency 'connection_pool', '~> 2.2'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,225 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vm_tiny_tds
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ken Collins
|
8
|
+
- Erik Bryn
|
9
|
+
- Will Bond
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2019-02-25 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: mini_portile2
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '2.0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rake
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '10.4'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '10.4'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rake-compiler
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '1.0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rake-compiler-dock
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.6.3
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.6.3
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: minitest
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '5.6'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '5.6'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: connection_pool
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '2.2'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - "~>"
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '2.2'
|
99
|
+
description: TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library.
|
100
|
+
Developed for the ActiveRecord SQL Server adapter.
|
101
|
+
email:
|
102
|
+
- ajithks@vmware.com
|
103
|
+
executables:
|
104
|
+
- defncopy-ttds
|
105
|
+
- tsql-ttds
|
106
|
+
extensions:
|
107
|
+
- ext/tiny_tds/extconf.rb
|
108
|
+
extra_rdoc_files: []
|
109
|
+
files:
|
110
|
+
- ".codeclimate.yml"
|
111
|
+
- ".gitattributes"
|
112
|
+
- ".gitignore"
|
113
|
+
- ".rubocop.yml"
|
114
|
+
- ".travis.yml"
|
115
|
+
- BACKERS.md
|
116
|
+
- CHANGELOG.md
|
117
|
+
- CODE_OF_CONDUCT.md
|
118
|
+
- Gemfile
|
119
|
+
- ISSUE_TEMPLATE.md
|
120
|
+
- MIT-LICENSE
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- VERSION
|
124
|
+
- appveyor.yml
|
125
|
+
- bin/defncopy-ttds
|
126
|
+
- bin/tsql-ttds
|
127
|
+
- exe/.keep
|
128
|
+
- ext/tiny_tds/client.c
|
129
|
+
- ext/tiny_tds/client.h
|
130
|
+
- ext/tiny_tds/extconf.rb
|
131
|
+
- ext/tiny_tds/extconsts.rb
|
132
|
+
- ext/tiny_tds/result.c
|
133
|
+
- ext/tiny_tds/result.h
|
134
|
+
- ext/tiny_tds/tiny_tds_ext.c
|
135
|
+
- ext/tiny_tds/tiny_tds_ext.h
|
136
|
+
- lib/tiny_tds.rb
|
137
|
+
- lib/tiny_tds/bin.rb
|
138
|
+
- lib/tiny_tds/client.rb
|
139
|
+
- lib/tiny_tds/error.rb
|
140
|
+
- lib/tiny_tds/gem.rb
|
141
|
+
- lib/tiny_tds/result.rb
|
142
|
+
- lib/tiny_tds/version.rb
|
143
|
+
- patches/freetds/1.00.27/0001-mingw_missing_inet_pton.diff
|
144
|
+
- patches/freetds/1.00.27/0002-Don-t-use-MSYS2-file-libws2_32.diff
|
145
|
+
- patches/libiconv/1.14/1-avoid-gets-error.patch
|
146
|
+
- tasks/native_gem.rake
|
147
|
+
- tasks/package.rake
|
148
|
+
- tasks/ports.rake
|
149
|
+
- tasks/ports/freetds.rb
|
150
|
+
- tasks/ports/libiconv.rb
|
151
|
+
- tasks/ports/openssl.rb
|
152
|
+
- tasks/ports/recipe.rb
|
153
|
+
- tasks/test.rake
|
154
|
+
- test/appveyor/dbsetup.ps1
|
155
|
+
- test/appveyor/dbsetup.sql
|
156
|
+
- test/benchmark/query.rb
|
157
|
+
- test/benchmark/query_odbc.rb
|
158
|
+
- test/benchmark/query_tinytds.rb
|
159
|
+
- test/bin/install-freetds.sh
|
160
|
+
- test/bin/install-openssl.sh
|
161
|
+
- test/bin/setup.sh
|
162
|
+
- test/client_test.rb
|
163
|
+
- test/gem_test.rb
|
164
|
+
- test/result_test.rb
|
165
|
+
- test/schema/1px.gif
|
166
|
+
- test/schema/sqlserver_2000.sql
|
167
|
+
- test/schema/sqlserver_2005.sql
|
168
|
+
- test/schema/sqlserver_2008.sql
|
169
|
+
- test/schema/sqlserver_2014.sql
|
170
|
+
- test/schema/sqlserver_2016.sql
|
171
|
+
- test/schema/sqlserver_azure.sql
|
172
|
+
- test/schema/sybase_ase.sql
|
173
|
+
- test/schema_test.rb
|
174
|
+
- test/test_helper.rb
|
175
|
+
- test/thread_test.rb
|
176
|
+
- tiny_tds.gemspec
|
177
|
+
homepage: https://github.com/Ajithprojs/tiny_tds
|
178
|
+
licenses:
|
179
|
+
- MIT
|
180
|
+
metadata:
|
181
|
+
msys2_mingw_dependencies: freetds
|
182
|
+
post_install_message:
|
183
|
+
rdoc_options:
|
184
|
+
- "--charset=UTF-8"
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: 2.0.0
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
requirements: []
|
198
|
+
rubyforge_project:
|
199
|
+
rubygems_version: 2.7.7
|
200
|
+
signing_key:
|
201
|
+
specification_version: 4
|
202
|
+
summary: TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library.
|
203
|
+
test_files:
|
204
|
+
- test/appveyor/dbsetup.ps1
|
205
|
+
- test/appveyor/dbsetup.sql
|
206
|
+
- test/benchmark/query.rb
|
207
|
+
- test/benchmark/query_odbc.rb
|
208
|
+
- test/benchmark/query_tinytds.rb
|
209
|
+
- test/bin/install-freetds.sh
|
210
|
+
- test/bin/install-openssl.sh
|
211
|
+
- test/bin/setup.sh
|
212
|
+
- test/client_test.rb
|
213
|
+
- test/gem_test.rb
|
214
|
+
- test/result_test.rb
|
215
|
+
- test/schema/1px.gif
|
216
|
+
- test/schema/sqlserver_2000.sql
|
217
|
+
- test/schema/sqlserver_2005.sql
|
218
|
+
- test/schema/sqlserver_2008.sql
|
219
|
+
- test/schema/sqlserver_2014.sql
|
220
|
+
- test/schema/sqlserver_2016.sql
|
221
|
+
- test/schema/sqlserver_azure.sql
|
222
|
+
- test/schema/sybase_ase.sql
|
223
|
+
- test/schema_test.rb
|
224
|
+
- test/test_helper.rb
|
225
|
+
- test/thread_test.rb
|