tiny_tds 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +187 -74
- data/CHANGELOG.md +8 -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
|
-
|