vm_tiny_tds 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +20 -0
- data/.gitattributes +1 -0
- data/.gitignore +20 -0
- data/.rubocop.yml +31 -0
- data/.travis.yml +24 -0
- data/BACKERS.md +32 -0
- data/CHANGELOG.md +255 -0
- data/CODE_OF_CONDUCT.md +31 -0
- data/Gemfile +9 -0
- data/ISSUE_TEMPLATE.md +38 -0
- data/MIT-LICENSE +23 -0
- data/README.md +504 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/appveyor.yml +51 -0
- data/bin/defncopy-ttds +3 -0
- data/bin/tsql-ttds +3 -0
- data/exe/.keep +0 -0
- data/ext/tiny_tds/client.c +451 -0
- data/ext/tiny_tds/client.h +51 -0
- data/ext/tiny_tds/extconf.rb +69 -0
- data/ext/tiny_tds/extconsts.rb +15 -0
- data/ext/tiny_tds/result.c +619 -0
- data/ext/tiny_tds/result.h +32 -0
- data/ext/tiny_tds/tiny_tds_ext.c +12 -0
- data/ext/tiny_tds/tiny_tds_ext.h +17 -0
- data/lib/tiny_tds/bin.rb +104 -0
- data/lib/tiny_tds/client.rb +136 -0
- data/lib/tiny_tds/error.rb +14 -0
- data/lib/tiny_tds/gem.rb +32 -0
- data/lib/tiny_tds/result.rb +7 -0
- data/lib/tiny_tds/version.rb +3 -0
- data/lib/tiny_tds.rb +61 -0
- data/patches/freetds/1.00.27/0001-mingw_missing_inet_pton.diff +34 -0
- data/patches/freetds/1.00.27/0002-Don-t-use-MSYS2-file-libws2_32.diff +28 -0
- data/patches/libiconv/1.14/1-avoid-gets-error.patch +17 -0
- data/tasks/native_gem.rake +14 -0
- data/tasks/package.rake +8 -0
- data/tasks/ports/freetds.rb +37 -0
- data/tasks/ports/libiconv.rb +43 -0
- data/tasks/ports/openssl.rb +78 -0
- data/tasks/ports/recipe.rb +52 -0
- data/tasks/ports.rake +87 -0
- data/tasks/test.rake +9 -0
- data/test/appveyor/dbsetup.ps1 +27 -0
- data/test/appveyor/dbsetup.sql +9 -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/bin/install-freetds.sh +20 -0
- data/test/bin/install-openssl.sh +18 -0
- data/test/bin/setup.sh +19 -0
- data/test/client_test.rb +230 -0
- data/test/gem_test.rb +179 -0
- data/test/result_test.rb +773 -0
- data/test/schema/1px.gif +0 -0
- data/test/schema/sqlserver_2000.sql +140 -0
- data/test/schema/sqlserver_2005.sql +140 -0
- data/test/schema/sqlserver_2008.sql +140 -0
- data/test/schema/sqlserver_2014.sql +140 -0
- data/test/schema/sqlserver_2016.sql +140 -0
- data/test/schema/sqlserver_azure.sql +140 -0
- data/test/schema/sybase_ase.sql +138 -0
- data/test/schema_test.rb +443 -0
- data/test/test_helper.rb +217 -0
- data/test/thread_test.rb +98 -0
- data/tiny_tds.gemspec +29 -0
- metadata +225 -0
data/tasks/ports.rake
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'mini_portile2'
|
3
|
+
require 'fileutils'
|
4
|
+
require_relative 'ports/libiconv'
|
5
|
+
require_relative 'ports/openssl'
|
6
|
+
require_relative 'ports/freetds'
|
7
|
+
require_relative '../ext/tiny_tds/extconsts'
|
8
|
+
|
9
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE if defined? OpenSSL
|
10
|
+
|
11
|
+
namespace :ports do
|
12
|
+
openssl = Ports::Openssl.new(OPENSSL_VERSION)
|
13
|
+
libiconv = Ports::Libiconv.new(ICONV_VERSION)
|
14
|
+
freetds = Ports::Freetds.new(FREETDS_VERSION)
|
15
|
+
|
16
|
+
directory "ports"
|
17
|
+
|
18
|
+
task :openssl, [:host] do |task, args|
|
19
|
+
args.with_defaults(host: RbConfig::CONFIG['host'])
|
20
|
+
|
21
|
+
openssl.files = [OPENSSL_SOURCE_URI]
|
22
|
+
openssl.host = args.host
|
23
|
+
openssl.cook
|
24
|
+
openssl.activate
|
25
|
+
end
|
26
|
+
|
27
|
+
task :libiconv, [:host] do |task, args|
|
28
|
+
args.with_defaults(host: RbConfig::CONFIG['host'])
|
29
|
+
|
30
|
+
libiconv.files = [ICONV_SOURCE_URI]
|
31
|
+
libiconv.host = args.host
|
32
|
+
libiconv.cook
|
33
|
+
libiconv.activate
|
34
|
+
end
|
35
|
+
|
36
|
+
task :freetds, [:host] do |task, args|
|
37
|
+
args.with_defaults(host: RbConfig::CONFIG['host'])
|
38
|
+
|
39
|
+
freetds.files = [FREETDS_SOURCE_URI]
|
40
|
+
freetds.host = args.host
|
41
|
+
|
42
|
+
if openssl
|
43
|
+
# freetds doesn't have an option that will provide an rpath
|
44
|
+
# so we do it manually
|
45
|
+
ENV['OPENSSL_CFLAGS'] = "-Wl,-rpath -Wl,#{openssl.path}/lib"
|
46
|
+
# Add the pkgconfig file with MSYS2'ish path, to prefer our ports build
|
47
|
+
# over MSYS2 system OpenSSL.
|
48
|
+
ENV['PKG_CONFIG_PATH'] = "#{openssl.path.gsub(/^(\w):/i){"/"+$1.downcase}}/lib/pkgconfig:#{ENV['PKG_CONFIG_PATH']}"
|
49
|
+
freetds.configure_options << "--with-openssl=#{openssl.path}"
|
50
|
+
end
|
51
|
+
|
52
|
+
if libiconv
|
53
|
+
freetds.configure_options << "--with-libiconv-prefix=#{libiconv.path}"
|
54
|
+
end
|
55
|
+
|
56
|
+
freetds.cook
|
57
|
+
freetds.activate
|
58
|
+
end
|
59
|
+
|
60
|
+
task :compile, [:host] do |task,args|
|
61
|
+
args.with_defaults(host: RbConfig::CONFIG['host'])
|
62
|
+
|
63
|
+
puts "Compiling ports for #{args.host}..."
|
64
|
+
|
65
|
+
['openssl','libiconv','freetds'].each do |lib|
|
66
|
+
Rake::Task["ports:#{lib}"].invoke(args.host)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
desc 'Build the ports windows binaries via rake-compiler-dock'
|
71
|
+
task 'cross' do
|
72
|
+
require 'rake_compiler_dock'
|
73
|
+
|
74
|
+
# make sure to install our bundle
|
75
|
+
build = ['bundle']
|
76
|
+
|
77
|
+
# build the ports for all our cross compile hosts
|
78
|
+
GEM_PLATFORM_HOSTS.each do |gem_platform, host|
|
79
|
+
build << "rake ports:compile[#{host}] MAKE='make -j`nproc`'"
|
80
|
+
end
|
81
|
+
|
82
|
+
RakeCompilerDock.sh build.join(' && ')
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc 'Build ports and activate libraries for the current architecture.'
|
87
|
+
task :ports => ['ports:compile']
|
data/tasks/test.rake
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
Write-Output "Setting up..."
|
3
|
+
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
|
4
|
+
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement") | Out-Null
|
5
|
+
|
6
|
+
Write-Output "Setting variables..."
|
7
|
+
$serverName = $env:COMPUTERNAME
|
8
|
+
$instances = @('SQL2012SP1', 'SQL2014', 'SQL2016')
|
9
|
+
$smo = 'Microsoft.SqlServer.Management.Smo.'
|
10
|
+
$wmi = new-object ($smo + 'Wmi.ManagedComputer')
|
11
|
+
|
12
|
+
Write-Output "Configure Instances..."
|
13
|
+
foreach ($instance in $instances) {
|
14
|
+
Write-Output "Instance $instance ..."
|
15
|
+
Write-Output "Enable TCP/IP and port 1433..."
|
16
|
+
$uri = "ManagedComputer[@Name='$serverName']/ServerInstance[@Name='$instance']/ServerProtocol[@Name='Tcp']"
|
17
|
+
$tcp = $wmi.GetSmoObject($uri)
|
18
|
+
$tcp.IsEnabled = $true
|
19
|
+
foreach ($ipAddress in $Tcp.IPAddresses) {
|
20
|
+
$ipAddress.IPAddressProperties["TcpDynamicPorts"].Value = ""
|
21
|
+
$ipAddress.IPAddressProperties["TcpPort"].Value = "1433"
|
22
|
+
}
|
23
|
+
$tcp.Alter()
|
24
|
+
}
|
25
|
+
|
26
|
+
Set-Service SQLBrowser -StartupType Manual
|
27
|
+
Start-Service SQLBrowser
|
@@ -0,0 +1,9 @@
|
|
1
|
+
CREATE DATABASE [tinytdstest];
|
2
|
+
GO
|
3
|
+
CREATE LOGIN [tinytds] WITH PASSWORD = '', CHECK_POLICY = OFF, DEFAULT_DATABASE = [tinytdstest];
|
4
|
+
GO
|
5
|
+
USE [tinytdstest];
|
6
|
+
CREATE USER [tinytds] FOR LOGIN [tinytds];
|
7
|
+
GO
|
8
|
+
EXEC sp_addrolemember N'db_owner', N'tinytds';
|
9
|
+
GO
|
@@ -0,0 +1,77 @@
|
|
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
|
+
|
@@ -0,0 +1,106 @@
|
|
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
|
+
|
@@ -0,0 +1,126 @@
|
|
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
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
if [ -z "$FREETDS_VERSION" ]; then
|
7
|
+
FREETDS_VERSION=$(ruby -r "./ext/tiny_tds/extconsts.rb" -e "puts FREETDS_VERSION")
|
8
|
+
fi
|
9
|
+
|
10
|
+
wget http://www.freetds.org/files/stable/freetds-$FREETDS_VERSION.tar.gz
|
11
|
+
tar -xzf freetds-$FREETDS_VERSION.tar.gz
|
12
|
+
cd freetds-$FREETDS_VERSION
|
13
|
+
./configure --prefix=/opt/local \
|
14
|
+
--with-openssl=/opt/local \
|
15
|
+
--with-tdsver=7.3
|
16
|
+
make
|
17
|
+
make install
|
18
|
+
cd ..
|
19
|
+
rm -rf freetds-$FREETDS_VERSION
|
20
|
+
rm freetds-$FREETDS_VERSION.tar.gz
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
if [ -z "$OPENSSL_VERSION" ]; then
|
7
|
+
OPENSSL_VERSION=$(ruby -r "./ext/tiny_tds/extconsts.rb" -e "puts OPENSSL_VERSION")
|
8
|
+
fi
|
9
|
+
|
10
|
+
wget https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz
|
11
|
+
tar -xzf openssl-$OPENSSL_VERSION.tar.gz
|
12
|
+
cd openssl-$OPENSSL_VERSION
|
13
|
+
./config --prefix=/opt/local --openssldir=/opt/local
|
14
|
+
make
|
15
|
+
make install_sw install_ssldirs
|
16
|
+
cd ..
|
17
|
+
rm -rf openssl-$OPENSSL_VERSION
|
18
|
+
rm openssl-$OPENSSL_VERSION.tar.gz
|
data/test/bin/setup.sh
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
tag=2017-GA
|
7
|
+
|
8
|
+
docker pull metaskills/mssql-server-linux-tinytds:$tag
|
9
|
+
|
10
|
+
container=$(docker ps -a -q --filter ancestor=metaskills/mssql-server-linux-tinytds:$tag)
|
11
|
+
if [[ -z $container ]]; then
|
12
|
+
docker run -p 1433:1433 -d metaskills/mssql-server-linux-tinytds:$tag && sleep 10
|
13
|
+
exit
|
14
|
+
fi
|
15
|
+
|
16
|
+
container=$(docker ps -q --filter ancestor=metaskills/mssql-server-linux-tinytds:$tag)
|
17
|
+
if [[ -z $container ]]; then
|
18
|
+
docker start $container && sleep 10
|
19
|
+
fi
|