vm_tiny_tds 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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