tiny_tds 3.1.0 → 3.2.1
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 +4 -4
- data/.github/workflows/ci.yml +188 -94
- data/CHANGELOG.md +13 -0
- data/Gemfile +1 -1
- data/README.md +59 -50
- data/Rakefile +46 -37
- data/VERSION +1 -1
- data/ext/tiny_tds/extconf.rb +169 -70
- data/ext/tiny_tds/extconsts.rb +3 -4
- data/lib/tiny_tds/bin.rb +12 -26
- data/lib/tiny_tds/client.rb +38 -42
- data/lib/tiny_tds/error.rb +0 -2
- data/lib/tiny_tds/gem.rb +5 -9
- data/lib/tiny_tds/result.rb +0 -2
- data/lib/tiny_tds/version.rb +1 -1
- data/lib/tiny_tds.rb +28 -47
- data/tasks/native_gem.rake +11 -18
- data/tasks/package.rake +1 -3
- data/tasks/ports.rake +7 -91
- data/tasks/test.rake +3 -5
- data/test/bin/install-freetds.sh +2 -4
- data/test/bin/restore-from-native-gem.ps1 +10 -0
- data/test/client_test.rb +106 -112
- data/test/gem_test.rb +31 -107
- data/test/result_test.rb +208 -221
- data/test/schema_test.rb +177 -181
- data/test/test_helper.rb +58 -63
- data/test/thread_test.rb +22 -31
- data/tiny_tds.gemspec +28 -29
- metadata +21 -13
- data/tasks/ports/freetds.rb +0 -32
- data/tasks/ports/libiconv.rb +0 -26
- data/tasks/ports/openssl.rb +0 -62
- data/tasks/ports/recipe.rb +0 -64
- data/test/benchmark/query.rb +0 -77
- data/test/benchmark/query_odbc.rb +0 -106
- data/test/benchmark/query_tinytds.rb +0 -126
data/tasks/ports/recipe.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'mini_portile2'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'rbconfig'
|
5
|
-
|
6
|
-
module Ports
|
7
|
-
class Recipe < MiniPortile
|
8
|
-
attr_writer :gem_platform
|
9
|
-
|
10
|
-
def cook
|
11
|
-
checkpoint = "ports/checkpoints/#{name}-#{version}-#{gem_platform}.installed"
|
12
|
-
|
13
|
-
unless File.exist? checkpoint
|
14
|
-
super
|
15
|
-
FileUtils.mkdir_p("ports/checkpoints")
|
16
|
-
FileUtils.touch checkpoint
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
attr_reader :gem_platform
|
23
|
-
|
24
|
-
def port_path
|
25
|
-
"#{@target}/#{gem_platform}/#{@name}/#{@version}"
|
26
|
-
end
|
27
|
-
|
28
|
-
def tmp_path
|
29
|
-
"tmp/#{gem_platform}/ports/#{@name}/#{@version}"
|
30
|
-
end
|
31
|
-
|
32
|
-
def configure_defaults
|
33
|
-
[
|
34
|
-
"--host=#{@host}",
|
35
|
-
'--disable-static',
|
36
|
-
'--enable-shared'
|
37
|
-
]
|
38
|
-
end
|
39
|
-
|
40
|
-
def windows?
|
41
|
-
host =~ /mswin|mingw32/
|
42
|
-
end
|
43
|
-
|
44
|
-
def system_host
|
45
|
-
RbConfig::CONFIG['host']
|
46
|
-
end
|
47
|
-
|
48
|
-
def cross_build?
|
49
|
-
host != system_host
|
50
|
-
end
|
51
|
-
|
52
|
-
def get_patches(libname, version)
|
53
|
-
patches = []
|
54
|
-
|
55
|
-
patch_path = File.expand_path(
|
56
|
-
File.join('..','..','..','patches',libname,version),
|
57
|
-
__FILE__
|
58
|
-
)
|
59
|
-
|
60
|
-
patches.concat(Dir[File.join(patch_path, '*.patch')].sort)
|
61
|
-
patches.concat(Dir[File.join(patch_path, '*.diff')].sort)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/test/benchmark/query.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
$:.unshift File.expand_path('../../../lib',__FILE__)
|
2
|
-
require 'rubygems'
|
3
|
-
require 'bench_press'
|
4
|
-
require 'tiny_tds'
|
5
|
-
require 'odbc'
|
6
|
-
require 'odbc_utf8'
|
7
|
-
|
8
|
-
extend BenchPress
|
9
|
-
|
10
|
-
author 'Ken Collins'
|
11
|
-
summary 'Query everything.'
|
12
|
-
|
13
|
-
reps 1_000
|
14
|
-
|
15
|
-
@odbc = ODBC.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
|
16
|
-
@odbc.use_time = true
|
17
|
-
|
18
|
-
@odbc_utf8 = ODBC_UTF8.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
|
19
|
-
@odbc_utf8.use_time = true
|
20
|
-
|
21
|
-
@tinytds = TinyTds::Client.new(
|
22
|
-
:dataserver => ENV['TINYTDS_UNIT_DATASERVER'],
|
23
|
-
:username => 'tinytds',
|
24
|
-
:password => '',
|
25
|
-
:database => 'tinytdstest',
|
26
|
-
:appname => 'TinyTds Dev',
|
27
|
-
:login_timeout => 5,
|
28
|
-
:timeout => 5 )
|
29
|
-
|
30
|
-
@query_all = "SELECT * FROM [datatypes]"
|
31
|
-
|
32
|
-
|
33
|
-
measure "ODBC (ascii-8bit)" do
|
34
|
-
h = @odbc.run(@query_all)
|
35
|
-
h.fetch_all
|
36
|
-
h.drop
|
37
|
-
end
|
38
|
-
|
39
|
-
# measure "ODBC (utf8)" do
|
40
|
-
# h = @odbc_utf8.run(@query_all)
|
41
|
-
# h.fetch_all
|
42
|
-
# h.drop
|
43
|
-
# end
|
44
|
-
|
45
|
-
measure "TinyTDS (row caching)" do
|
46
|
-
@tinytds.execute(@query_all).each
|
47
|
-
end
|
48
|
-
|
49
|
-
measure "TinyTDS (no caching)" do
|
50
|
-
@tinytds.execute(@query_all).each(:cache_rows => false)
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
=begin
|
56
|
-
|
57
|
-
Author: Ken Collins
|
58
|
-
Date: January 22, 2011
|
59
|
-
Summary: Query everything.
|
60
|
-
|
61
|
-
System Information
|
62
|
-
------------------
|
63
|
-
Operating System: Mac OS X 10.6.6 (10J567)
|
64
|
-
CPU: Intel Core 2 Duo 1.6 GHz
|
65
|
-
Processor Count: 2
|
66
|
-
Memory: 4 GB
|
67
|
-
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.4.3], MBARI 0x6770, Ruby Enterprise Edition 2010.02
|
68
|
-
|
69
|
-
"TinyTDS (row caching)" is up to 79% faster over 1,000 repetitions
|
70
|
-
------------------------------------------------------------------
|
71
|
-
|
72
|
-
TinyTDS (row caching) 4.90862512588501 secs Fastest
|
73
|
-
TinyTDS (no caching) 4.91626906394958 secs 0% Slower
|
74
|
-
ODBC (ascii-8bit) 23.959536075592 secs 79% Slower
|
75
|
-
|
76
|
-
=end
|
77
|
-
|
@@ -1,106 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bench_press'
|
3
|
-
begin gem 'odbc', '0.99992' ; rescue Gem::LoadError ; end
|
4
|
-
require 'odbc'
|
5
|
-
|
6
|
-
extend BenchPress
|
7
|
-
|
8
|
-
author 'Ken Collins'
|
9
|
-
summary 'Benchmarking ODBC Querys'
|
10
|
-
|
11
|
-
reps 1_000
|
12
|
-
|
13
|
-
@client = ODBC.connect ENV['TINYTDS_UNIT_DATASERVER'], 'tinytds', ''
|
14
|
-
@client.use_time = true
|
15
|
-
|
16
|
-
@query_nothing = "SELECT NULL AS [null]"
|
17
|
-
@query_ints = "SELECT [int], [bigint], [smallint], [tinyint] FROM [datatypes]"
|
18
|
-
@query_binaries = "SELECT [binary_50], [image], [varbinary_50] FROM [datatypes]"
|
19
|
-
@query_bits = "SELECT [bit] FROM [datatypes]"
|
20
|
-
@query_chars = "SELECT [char_10], [nchar_10], [ntext], [nvarchar_50], [text], [varchar_50] FROM [datatypes]"
|
21
|
-
@query_dates = "SELECT [datetime], [smalldatetime] FROM [datatypes]"
|
22
|
-
@query_decimals = "SELECT [decimal_9_2], [decimal_16_4], [numeric_18_0], [numeric_36_2] FROM [datatypes]"
|
23
|
-
@query_floats = "SELECT [float], [real] FROM [datatypes]"
|
24
|
-
@query_moneys = "SELECT [money], [smallmoney] FROM [datatypes]"
|
25
|
-
@query_guids = "SELECT [uniqueidentifier] FROM [datatypes]"
|
26
|
-
@query_all = "SELECT * FROM [datatypes]"
|
27
|
-
|
28
|
-
def select_all(query)
|
29
|
-
h = @client.run(query)
|
30
|
-
h.fetch_all
|
31
|
-
h.drop
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
measure "Nothing" do
|
36
|
-
select_all @query_nothing
|
37
|
-
end
|
38
|
-
|
39
|
-
measure "Integers" do
|
40
|
-
select_all @query_ints
|
41
|
-
end
|
42
|
-
|
43
|
-
measure "Binaries" do
|
44
|
-
select_all @query_binaries
|
45
|
-
end
|
46
|
-
|
47
|
-
measure "Bits" do
|
48
|
-
select_all @query_bits
|
49
|
-
end
|
50
|
-
|
51
|
-
measure "Chars" do
|
52
|
-
select_all @query_chars
|
53
|
-
end
|
54
|
-
|
55
|
-
measure "Dates" do
|
56
|
-
select_all @query_dates
|
57
|
-
end
|
58
|
-
|
59
|
-
measure "Decimals" do
|
60
|
-
select_all @query_decimals
|
61
|
-
end
|
62
|
-
|
63
|
-
measure "Floats" do
|
64
|
-
select_all @query_floats
|
65
|
-
end
|
66
|
-
|
67
|
-
measure "Moneys" do
|
68
|
-
select_all @query_moneys
|
69
|
-
end
|
70
|
-
|
71
|
-
measure "Guids" do
|
72
|
-
select_all @query_guids
|
73
|
-
end
|
74
|
-
|
75
|
-
measure "All" do
|
76
|
-
select_all @query_all
|
77
|
-
end
|
78
|
-
|
79
|
-
|
80
|
-
=begin
|
81
|
-
|
82
|
-
System Information
|
83
|
-
------------------
|
84
|
-
Operating System: Mac OS X 10.6.4 (10F569)
|
85
|
-
CPU: Intel Core 2 Duo 2.4 GHz
|
86
|
-
Processor Count: 2
|
87
|
-
Memory: 4 GB
|
88
|
-
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]
|
89
|
-
|
90
|
-
"Nothing" is up to 98% faster over 1,000 repetitions
|
91
|
-
----------------------------------------------------
|
92
|
-
|
93
|
-
Nothing 0.297961950302124 secs Fastest
|
94
|
-
Bits 0.377611875534058 secs 21% Slower
|
95
|
-
Guids 0.381000995635986 secs 21% Slower
|
96
|
-
Moneys 0.405518054962158 secs 26% Slower
|
97
|
-
Floats 0.409428119659424 secs 27% Slower
|
98
|
-
Integers 0.448167085647583 secs 33% Slower
|
99
|
-
Decimals 0.471596956253052 secs 36% Slower
|
100
|
-
Dates 0.52501106262207 secs 43% Slower
|
101
|
-
Binaries 3.66349482536316 secs 91% Slower
|
102
|
-
Chars 6.82928085327148 secs 95% Slower
|
103
|
-
All 28.4982612133026 secs 98% Slower
|
104
|
-
|
105
|
-
=end
|
106
|
-
|
@@ -1,126 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bench_press'
|
3
|
-
$:.unshift File.expand_path('../../../lib',__FILE__)
|
4
|
-
require 'tiny_tds'
|
5
|
-
|
6
|
-
extend BenchPress
|
7
|
-
|
8
|
-
author 'Ken Collins'
|
9
|
-
summary 'Benchmark TinyTds Querys'
|
10
|
-
|
11
|
-
reps 1_000
|
12
|
-
|
13
|
-
@client = TinyTds::Client.new({
|
14
|
-
:dataserver => ENV['TINYTDS_UNIT_DATASERVER'],
|
15
|
-
:username => 'tinytds',
|
16
|
-
:password => '',
|
17
|
-
:database => 'tinytdstest',
|
18
|
-
:appname => 'TinyTds Dev',
|
19
|
-
:login_timeout => 5,
|
20
|
-
:timeout => 5
|
21
|
-
})
|
22
|
-
|
23
|
-
@query_nothing = "SELECT NULL AS [null]"
|
24
|
-
@query_ints = "SELECT [int], [bigint], [smallint], [tinyint] FROM [datatypes]"
|
25
|
-
@query_binaries = "SELECT [binary_50], [image], [varbinary_50] FROM [datatypes]"
|
26
|
-
@query_bits = "SELECT [bit] FROM [datatypes]"
|
27
|
-
@query_chars = "SELECT [char_10], [nchar_10], [ntext], [nvarchar_50], [text], [varchar_50] FROM [datatypes]"
|
28
|
-
@query_dates = "SELECT [datetime], [smalldatetime] FROM [datatypes]"
|
29
|
-
@query_decimals = "SELECT [decimal_9_2], [decimal_16_4], [numeric_18_0], [numeric_36_2] FROM [datatypes]"
|
30
|
-
@query_floats = "SELECT [float], [real] FROM [datatypes]"
|
31
|
-
@query_moneys = "SELECT [money], [smallmoney] FROM [datatypes]"
|
32
|
-
@query_guids = "SELECT [uniqueidentifier] FROM [datatypes]"
|
33
|
-
@query_all = "SELECT * FROM [datatypes]"
|
34
|
-
|
35
|
-
def select_all(query)
|
36
|
-
@client.execute(query).each
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
measure "Nothing" do
|
41
|
-
select_all @query_nothing
|
42
|
-
end
|
43
|
-
|
44
|
-
measure "Integers" do
|
45
|
-
select_all @query_ints
|
46
|
-
end
|
47
|
-
|
48
|
-
measure "Binaries" do
|
49
|
-
select_all @query_binaries
|
50
|
-
end
|
51
|
-
|
52
|
-
measure "Bits" do
|
53
|
-
select_all @query_bits
|
54
|
-
end
|
55
|
-
|
56
|
-
measure "Chars" do
|
57
|
-
select_all @query_chars
|
58
|
-
end
|
59
|
-
|
60
|
-
measure "Dates" do
|
61
|
-
select_all @query_dates
|
62
|
-
end
|
63
|
-
|
64
|
-
measure "Decimals" do
|
65
|
-
select_all @query_decimals
|
66
|
-
end
|
67
|
-
|
68
|
-
measure "Floats" do
|
69
|
-
select_all @query_floats
|
70
|
-
end
|
71
|
-
|
72
|
-
measure "Moneys" do
|
73
|
-
select_all @query_moneys
|
74
|
-
end
|
75
|
-
|
76
|
-
measure "Guids" do
|
77
|
-
select_all @query_guids
|
78
|
-
end
|
79
|
-
|
80
|
-
measure "All" do
|
81
|
-
select_all @query_all
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
=begin
|
86
|
-
|
87
|
-
Query Tinytds
|
88
|
-
=============
|
89
|
-
Author: Ken Collins
|
90
|
-
Date: September 11, 2011
|
91
|
-
Summary: Benchmark TinyTds Querys
|
92
|
-
|
93
|
-
System Information
|
94
|
-
------------------
|
95
|
-
Operating System: Mac OS X 10.7.1 (11B26)
|
96
|
-
CPU: Quad-Core Intel Xeon 2.66 GHz
|
97
|
-
Processor Count: 4
|
98
|
-
Memory: 24 GB
|
99
|
-
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin11.1.0], MBARI 0x6770, Ruby Enterprise Edition 2011.03
|
100
|
-
|
101
|
-
----------------------------------------------------
|
102
|
-
(before 64bit times) (after 64bit times)
|
103
|
-
Nothing 0.287657022476196 secs Nothing 0.289273977279663 secs
|
104
|
-
Bits 0.406533002853394 secs Bits 0.424988031387329 secs
|
105
|
-
Guids 0.419962882995605 secs Guids 0.427381992340088 secs
|
106
|
-
Floats 0.452103137969971 secs Floats 0.455377101898193 secs
|
107
|
-
Moneys 0.481696844100952 secs Moneys 0.485175132751465 secs
|
108
|
-
Integers 0.496185064315796 secs Integers 0.525003910064697 secs
|
109
|
-
Binaries 0.538873195648193 secs Decimals 0.541536808013916 secs
|
110
|
-
Decimals 0.540570974349976 secs Binaries 0.542865991592407 secs
|
111
|
-
Dates 0.761389970779419 secs Dates 1.51440119743347 secs
|
112
|
-
Chars 0.793163061141968 secs Chars 0.666505098342896 secs
|
113
|
-
All 4.4630811214447 secs All 5.17242312431335 secs
|
114
|
-
|
115
|
-
=end
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|