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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +20 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +20 -0
  5. data/.rubocop.yml +31 -0
  6. data/.travis.yml +24 -0
  7. data/BACKERS.md +32 -0
  8. data/CHANGELOG.md +255 -0
  9. data/CODE_OF_CONDUCT.md +31 -0
  10. data/Gemfile +9 -0
  11. data/ISSUE_TEMPLATE.md +38 -0
  12. data/MIT-LICENSE +23 -0
  13. data/README.md +504 -0
  14. data/Rakefile +53 -0
  15. data/VERSION +1 -0
  16. data/appveyor.yml +51 -0
  17. data/bin/defncopy-ttds +3 -0
  18. data/bin/tsql-ttds +3 -0
  19. data/exe/.keep +0 -0
  20. data/ext/tiny_tds/client.c +451 -0
  21. data/ext/tiny_tds/client.h +51 -0
  22. data/ext/tiny_tds/extconf.rb +69 -0
  23. data/ext/tiny_tds/extconsts.rb +15 -0
  24. data/ext/tiny_tds/result.c +619 -0
  25. data/ext/tiny_tds/result.h +32 -0
  26. data/ext/tiny_tds/tiny_tds_ext.c +12 -0
  27. data/ext/tiny_tds/tiny_tds_ext.h +17 -0
  28. data/lib/tiny_tds/bin.rb +104 -0
  29. data/lib/tiny_tds/client.rb +136 -0
  30. data/lib/tiny_tds/error.rb +14 -0
  31. data/lib/tiny_tds/gem.rb +32 -0
  32. data/lib/tiny_tds/result.rb +7 -0
  33. data/lib/tiny_tds/version.rb +3 -0
  34. data/lib/tiny_tds.rb +61 -0
  35. data/patches/freetds/1.00.27/0001-mingw_missing_inet_pton.diff +34 -0
  36. data/patches/freetds/1.00.27/0002-Don-t-use-MSYS2-file-libws2_32.diff +28 -0
  37. data/patches/libiconv/1.14/1-avoid-gets-error.patch +17 -0
  38. data/tasks/native_gem.rake +14 -0
  39. data/tasks/package.rake +8 -0
  40. data/tasks/ports/freetds.rb +37 -0
  41. data/tasks/ports/libiconv.rb +43 -0
  42. data/tasks/ports/openssl.rb +78 -0
  43. data/tasks/ports/recipe.rb +52 -0
  44. data/tasks/ports.rake +87 -0
  45. data/tasks/test.rake +9 -0
  46. data/test/appveyor/dbsetup.ps1 +27 -0
  47. data/test/appveyor/dbsetup.sql +9 -0
  48. data/test/benchmark/query.rb +77 -0
  49. data/test/benchmark/query_odbc.rb +106 -0
  50. data/test/benchmark/query_tinytds.rb +126 -0
  51. data/test/bin/install-freetds.sh +20 -0
  52. data/test/bin/install-openssl.sh +18 -0
  53. data/test/bin/setup.sh +19 -0
  54. data/test/client_test.rb +230 -0
  55. data/test/gem_test.rb +179 -0
  56. data/test/result_test.rb +773 -0
  57. data/test/schema/1px.gif +0 -0
  58. data/test/schema/sqlserver_2000.sql +140 -0
  59. data/test/schema/sqlserver_2005.sql +140 -0
  60. data/test/schema/sqlserver_2008.sql +140 -0
  61. data/test/schema/sqlserver_2014.sql +140 -0
  62. data/test/schema/sqlserver_2016.sql +140 -0
  63. data/test/schema/sqlserver_azure.sql +140 -0
  64. data/test/schema/sybase_ase.sql +138 -0
  65. data/test/schema_test.rb +443 -0
  66. data/test/test_helper.rb +217 -0
  67. data/test/thread_test.rb +98 -0
  68. data/tiny_tds.gemspec +29 -0
  69. metadata +225 -0
@@ -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