tiny_tds 0.6.2-x64-mingw32
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 +15 -0
- data/.gitignore +19 -0
- data/CHANGELOG +180 -0
- data/Gemfile +3 -0
- data/MIT-LICENSE +23 -0
- data/README.md +385 -0
- data/Rakefile +114 -0
- data/compile/rake-compiler-dev-box.patch +31 -0
- data/ext/patch/Makefile.in.diff +29 -0
- data/ext/patch/dblib-30-char-username.diff +11 -0
- data/ext/patch/sspi_w_kerberos.diff +42 -0
- data/ext/tiny_tds/client.c +408 -0
- data/ext/tiny_tds/client.h +46 -0
- data/ext/tiny_tds/extconf.rb +102 -0
- data/ext/tiny_tds/result.c +599 -0
- data/ext/tiny_tds/result.h +36 -0
- data/ext/tiny_tds/tiny_tds_ext.c +12 -0
- data/ext/tiny_tds/tiny_tds_ext.h +15 -0
- data/lib/tiny_tds.rb +19 -0
- data/lib/tiny_tds/client.rb +96 -0
- data/lib/tiny_tds/error.rb +29 -0
- data/lib/tiny_tds/result.rb +8 -0
- data/lib/tiny_tds/version.rb +3 -0
- data/tasks/ports.rake +79 -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/client_test.rb +170 -0
- data/test/result_test.rb +732 -0
- data/test/schema/1px.gif +0 -0
- data/test/schema/sqlserver_2000.sql +138 -0
- data/test/schema/sqlserver_2005.sql +138 -0
- data/test/schema/sqlserver_2008.sql +138 -0
- data/test/schema/sqlserver_azure.sql +138 -0
- data/test/schema/sybase_ase.sql +138 -0
- data/test/schema_test.rb +305 -0
- data/test/test_helper.rb +195 -0
- data/test/thread_test.rb +95 -0
- metadata +171 -0
data/test/thread_test.rb
ADDED
@@ -0,0 +1,95 @@
|
|
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
|
+
it 'should finish faster in parallel' do
|
19
|
+
x = Benchmark.realtime do
|
20
|
+
threads = []
|
21
|
+
@numthreads.times do |i|
|
22
|
+
start = Time.new
|
23
|
+
threads << Thread.new do
|
24
|
+
ts = Time.new
|
25
|
+
@pool.with do |client|
|
26
|
+
result = client.execute @query
|
27
|
+
result.each { |r| puts r }
|
28
|
+
end
|
29
|
+
te = Time.new
|
30
|
+
@logger.info "Thread #{i} finished in #{te - ts} thread seconds, #{te - start} real seconds"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
threads.each { |t| t.join }
|
34
|
+
end
|
35
|
+
assert x < @numthreads, "#{x} is not faster than #{@numthreads} seconds"
|
36
|
+
mintime = (1.0*@numthreads/@poolsize).ceil
|
37
|
+
@logger.info "#{@numthreads} queries on #{@poolsize} threads: #{x} sec. Minimum time: #{mintime} sec."
|
38
|
+
assert x > mintime, "#{x} is not slower than #{mintime} seconds"
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should not crash on error in parallel' do
|
42
|
+
threads = []
|
43
|
+
@numthreads.times do |i|
|
44
|
+
threads << Thread.new do
|
45
|
+
@pool.with do |client|
|
46
|
+
begin
|
47
|
+
result = client.execute "select dbname()"
|
48
|
+
result.each { |r| puts r }
|
49
|
+
rescue Exception => e
|
50
|
+
# We are throwing an error on purpose here since 0.6.1 would
|
51
|
+
# segfault on errors thrown in threads
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
threads.each { |t| t.join }
|
57
|
+
assert true
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should cancel when hitting timeout in thread' do
|
61
|
+
exception = false
|
62
|
+
|
63
|
+
thread = Thread.new do
|
64
|
+
@pool.with do |client|
|
65
|
+
begin
|
66
|
+
# The default query timeout is 5, so this will last longer than that
|
67
|
+
result = client.execute "waitfor delay '00:00:07'; select db_name()"
|
68
|
+
result.each { |r| puts r }
|
69
|
+
rescue TinyTds::Error => e
|
70
|
+
if e.message == 'Adaptive Server connection timed out'
|
71
|
+
exception = true
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
timer_thread = Thread.new do
|
78
|
+
# Sleep until after the timeout (of 5) should have been reached
|
79
|
+
sleep(6)
|
80
|
+
if not exception
|
81
|
+
thread.kill
|
82
|
+
raise "Timeout passed without query timing out"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
thread.join
|
87
|
+
timer_thread.join
|
88
|
+
|
89
|
+
assert exception
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tiny_tds
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.2
|
5
|
+
platform: x64-mingw32
|
6
|
+
authors:
|
7
|
+
- Ken Collins
|
8
|
+
- Erik Bryn
|
9
|
+
- Will Bond
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.2
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 0.9.2
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: mini_portile
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.5.1
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ~>
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 0.5.1
|
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: 0.9.1
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.9.1
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: activesupport
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ~>
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '3.0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '3.0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: minitest
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
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: 0.9.2
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.9.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
|
+
- ken@metaskills.net
|
103
|
+
- will@wbond.net
|
104
|
+
executables: []
|
105
|
+
extensions: []
|
106
|
+
extra_rdoc_files: []
|
107
|
+
files:
|
108
|
+
- .gitignore
|
109
|
+
- CHANGELOG
|
110
|
+
- Gemfile
|
111
|
+
- MIT-LICENSE
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- compile/rake-compiler-dev-box.patch
|
115
|
+
- ext/patch/Makefile.in.diff
|
116
|
+
- ext/patch/dblib-30-char-username.diff
|
117
|
+
- ext/patch/sspi_w_kerberos.diff
|
118
|
+
- ext/tiny_tds/client.c
|
119
|
+
- ext/tiny_tds/client.h
|
120
|
+
- ext/tiny_tds/extconf.rb
|
121
|
+
- ext/tiny_tds/result.c
|
122
|
+
- ext/tiny_tds/result.h
|
123
|
+
- ext/tiny_tds/tiny_tds_ext.c
|
124
|
+
- ext/tiny_tds/tiny_tds_ext.h
|
125
|
+
- lib/tiny_tds.rb
|
126
|
+
- lib/tiny_tds/2.0/tiny_tds.so
|
127
|
+
- lib/tiny_tds/2.1/tiny_tds.so
|
128
|
+
- lib/tiny_tds/client.rb
|
129
|
+
- lib/tiny_tds/error.rb
|
130
|
+
- lib/tiny_tds/result.rb
|
131
|
+
- lib/tiny_tds/version.rb
|
132
|
+
- tasks/ports.rake
|
133
|
+
- test/benchmark/query.rb
|
134
|
+
- test/benchmark/query_odbc.rb
|
135
|
+
- test/benchmark/query_tinytds.rb
|
136
|
+
- test/client_test.rb
|
137
|
+
- test/result_test.rb
|
138
|
+
- test/schema/1px.gif
|
139
|
+
- test/schema/sqlserver_2000.sql
|
140
|
+
- test/schema/sqlserver_2005.sql
|
141
|
+
- test/schema/sqlserver_2008.sql
|
142
|
+
- test/schema/sqlserver_azure.sql
|
143
|
+
- test/schema/sybase_ase.sql
|
144
|
+
- test/schema_test.rb
|
145
|
+
- test/test_helper.rb
|
146
|
+
- test/thread_test.rb
|
147
|
+
homepage: http://github.com/rails-sqlserver/tiny_tds
|
148
|
+
licenses: []
|
149
|
+
metadata: {}
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options:
|
152
|
+
- --charset=UTF-8
|
153
|
+
require_paths:
|
154
|
+
- lib
|
155
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
requirements: []
|
166
|
+
rubyforge_project:
|
167
|
+
rubygems_version: 2.2.2
|
168
|
+
signing_key:
|
169
|
+
specification_version: 4
|
170
|
+
summary: TinyTDS - A modern, simple and fast FreeTDS library for Ruby using DB-Library.
|
171
|
+
test_files: []
|