activerecord_sqlserver_crm 4.2.4 → 4.2.5
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/config/initializers/extensions.rb +1 -0
- data/lib/activerecord_sqlserver_crm/version.rb +1 -1
- data/lib/sql_server_adapter.rb +107 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04c61257ab2299b47f3e71dfc4e0967dc0dd82c3
|
4
|
+
data.tar.gz: 4335bc027dbba84fae3db4769696bd5217428bf6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92c6fa1ea3379529feab1dbc5fb9bbcf112a53f96b8339eab27a15312749302e8f080d967b876f0d32e78ec357d66e5978b5b8c8cd574b93c6adcd0fa77441c5
|
7
|
+
data.tar.gz: 09e4ee73ea5d37e3e0dcd6f05ce11e1b1049573440cab4c3d198b366a91951f5bc0b45b7e87766c2f6e124d78c8177d350e8b238669558ce737e618907dbfe2e
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# The code changes here are for using failover. Add you secondary host in database.yml as a slave. For example
|
2
|
+
#
|
3
|
+
# development:
|
4
|
+
# adapter: sqlserver
|
5
|
+
# host: master.db.int
|
6
|
+
# port: 1433
|
7
|
+
# database: FailoverDatabase
|
8
|
+
# username: user
|
9
|
+
# password: pass
|
10
|
+
# slaves:
|
11
|
+
# - host: slave.db.int
|
12
|
+
#
|
13
|
+
module ActiveRecord
|
14
|
+
module ConnectionAdapters
|
15
|
+
class SQLServerAdapter
|
16
|
+
|
17
|
+
def connect
|
18
|
+
config = @connection_options
|
19
|
+
# If using host database, try connect to master again after x minutes
|
20
|
+
if using_slave? && @switch_back_next_attempt.present? && @switch_back_next_attempt <= Time.now
|
21
|
+
change_active_host
|
22
|
+
end
|
23
|
+
@connection = case config[:mode]
|
24
|
+
when :dblib
|
25
|
+
begin
|
26
|
+
# Attempt first connect
|
27
|
+
dblib_connect(config)
|
28
|
+
rescue
|
29
|
+
begin
|
30
|
+
dblib_connect(config)
|
31
|
+
rescue
|
32
|
+
change_active_host
|
33
|
+
dblib_connect(config)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
when :odbc
|
37
|
+
odbc_connect(config)
|
38
|
+
end
|
39
|
+
@spid = _raw_select('SELECT @@SPID', fetch: :rows).first.first
|
40
|
+
configure_connection
|
41
|
+
end
|
42
|
+
|
43
|
+
def using_master?
|
44
|
+
@active_host == @connection_options[:host]
|
45
|
+
end
|
46
|
+
|
47
|
+
def using_slave?
|
48
|
+
!using_master?
|
49
|
+
end
|
50
|
+
|
51
|
+
def active_host=(host)
|
52
|
+
@active_host = host
|
53
|
+
end
|
54
|
+
|
55
|
+
def active_host
|
56
|
+
@active_host ||= @connection_options[:host]
|
57
|
+
end
|
58
|
+
|
59
|
+
def change_active_host
|
60
|
+
slave_host = @connection_options[:slaves][0]['host']
|
61
|
+
return unless slave_host
|
62
|
+
if using_master?
|
63
|
+
self.active_host = slave_host
|
64
|
+
# After x minutes, try using the master database again
|
65
|
+
@switch_back_next_attempt = Time.now + 5.minute
|
66
|
+
else
|
67
|
+
self.active_host = @connection_options[:host]
|
68
|
+
@switch_back_next_attempt = nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def dblib_connect(config)
|
73
|
+
TinyTds::Client.new(
|
74
|
+
dataserver: config[:dataserver],
|
75
|
+
host: active_host,
|
76
|
+
port: config[:port],
|
77
|
+
username: config[:username],
|
78
|
+
password: config[:password],
|
79
|
+
database: config[:database],
|
80
|
+
tds_version: config[:tds_version],
|
81
|
+
appname: config_appname(config),
|
82
|
+
login_timeout: config_login_timeout(config),
|
83
|
+
timeout: config_timeout(config),
|
84
|
+
encoding: config_encoding(config),
|
85
|
+
azure: config[:azure]
|
86
|
+
).tap do |client|
|
87
|
+
if config[:azure]
|
88
|
+
client.execute('SET ANSI_NULLS ON').do
|
89
|
+
client.execute('SET CURSOR_CLOSE_ON_COMMIT OFF').do
|
90
|
+
client.execute('SET ANSI_NULL_DFLT_ON ON').do
|
91
|
+
client.execute('SET IMPLICIT_TRANSACTIONS OFF').do
|
92
|
+
client.execute('SET ANSI_PADDING ON').do
|
93
|
+
client.execute('SET QUOTED_IDENTIFIER ON').do
|
94
|
+
client.execute('SET ANSI_WARNINGS ON').do
|
95
|
+
else
|
96
|
+
client.execute('SET ANSI_DEFAULTS ON').do
|
97
|
+
client.execute('SET CURSOR_CLOSE_ON_COMMIT OFF').do
|
98
|
+
client.execute('SET IMPLICIT_TRANSACTIONS OFF').do
|
99
|
+
end
|
100
|
+
client.execute('SET TEXTSIZE 2147483647').do
|
101
|
+
client.execute('SET CONCAT_NULL_YIELDS_NULL ON').do
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord_sqlserver_crm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rolf Lawrenz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- lib/odata/model.rb
|
152
152
|
- lib/odata/operation.rb
|
153
153
|
- lib/odata/update_operation.rb
|
154
|
+
- lib/sql_server_adapter.rb
|
154
155
|
- lib/tasks/activerecord_sqlserver_crm_tasks.rake
|
155
156
|
homepage: https://github.com/RolfLawrenz/activerecord_sqlserver_crm
|
156
157
|
licenses:
|