@@ -59,11 +59,70 @@ class SQLServerAdapter < AbstractAdapter
59
59
self . use_output_inserted = true
60
60
self . exclude_output_inserted_table_names = Concurrent ::Map . new { false }
61
61
62
- def initialize ( connection , logger = nil , config = { } )
62
+ class << self
63
+ def new_client ( config )
64
+ case config [ :mode ]
65
+ when :dblib
66
+ dblib_connect ( config )
67
+ end
68
+ end
69
+
70
+ def dblib_connect ( config )
71
+ TinyTds ::Client . new (
72
+ dataserver : config [ :dataserver ] ,
73
+ host : config [ :host ] ,
74
+ port : config [ :port ] ,
75
+ username : config [ :username ] ,
76
+ password : config [ :password ] ,
77
+ database : config [ :database ] ,
78
+ tds_version : config [ :tds_version ] || "7.3" ,
79
+ appname : config_appname ( config ) ,
80
+ login_timeout : config_login_timeout ( config ) ,
81
+ timeout : config_timeout ( config ) ,
82
+ encoding : config_encoding ( config ) ,
83
+ azure : config [ :azure ] ,
84
+ contained : config [ :contained ]
85
+ ) . tap do |client |
86
+ if config [ :azure ]
87
+ client . execute ( "SET ANSI_NULLS ON" ) . do
88
+ client . execute ( "SET ANSI_NULL_DFLT_ON ON" ) . do
89
+ client . execute ( "SET ANSI_PADDING ON" ) . do
90
+ client . execute ( "SET ANSI_WARNINGS ON" ) . do
91
+ else
92
+ client . execute ( "SET ANSI_DEFAULTS ON" ) . do
93
+ end
94
+ client . execute ( "SET QUOTED_IDENTIFIER ON" ) . do
95
+ client . execute ( "SET CURSOR_CLOSE_ON_COMMIT OFF" ) . do
96
+ client . execute ( "SET IMPLICIT_TRANSACTIONS OFF" ) . do
97
+ client . execute ( "SET TEXTSIZE 2147483647" ) . do
98
+ client . execute ( "SET CONCAT_NULL_YIELDS_NULL ON" ) . do
99
+ end
100
+ end
101
+
102
+ def config_appname ( config )
103
+ config [ :appname ] || configure_application_name || Rails . application . class . name . split ( "::" ) . first rescue nil
104
+ end
105
+
106
+ def config_login_timeout ( config )
107
+ config [ :login_timeout ] . present? ? config [ :login_timeout ] . to_i : nil
108
+ end
109
+
110
+ def config_timeout ( config )
111
+ config [ :timeout ] . present? ? config [ :timeout ] . to_i / 1000 : nil
112
+ end
113
+
114
+ def config_encoding ( config )
115
+ config [ :encoding ] . present? ? config [ :encoding ] : nil
116
+ end
117
+ end
118
+
119
+ def initialize ( connection , logger , _connection_options , config )
63
120
super ( connection , logger , config )
64
- # Our Responsibility
121
+
65
122
@connection_options = config
66
- connect
123
+ @spid = _raw_select ( "SELECT @@SPID" , fetch : :rows ) . first . first
124
+ @version_year = version_year
125
+
67
126
initialize_dateformatter
68
127
use_database
69
128
end
@@ -408,78 +467,18 @@ def translate_exception(e, message:, sql:, binds:)
408
467
409
468
# === SQLServer Specific (Connection Management) ================ #
410
469
411
- def connect
412
- config = @connection_options
413
- @connection = case config [ :mode ]
414
- when :dblib
415
- dblib_connect ( config )
416
- end
417
- @spid = _raw_select ( "SELECT @@SPID" , fetch : :rows ) . first . first
418
- @version_year = version_year
419
- configure_connection
420
- end
421
-
422
470
def connection_errors
423
471
@connection_errors ||= [ ] . tap do |errors |
424
472
errors << TinyTds ::Error if defined? ( TinyTds ::Error )
425
473
end
426
474
end
427
475
428
- def dblib_connect ( config )
429
- TinyTds ::Client . new (
430
- dataserver : config [ :dataserver ] ,
431
- host : config [ :host ] ,
432
- port : config [ :port ] ,
433
- username : config [ :username ] ,
434
- password : config [ :password ] ,
435
- database : config [ :database ] ,
436
- tds_version : config [ :tds_version ] || "7.3" ,
437
- appname : config_appname ( config ) ,
438
- login_timeout : config_login_timeout ( config ) ,
439
- timeout : config_timeout ( config ) ,
440
- encoding : config_encoding ( config ) ,
441
- azure : config [ :azure ] ,
442
- contained : config [ :contained ]
443
- ) . tap do |client |
444
- if config [ :azure ]
445
- client . execute ( "SET ANSI_NULLS ON" ) . do
446
- client . execute ( "SET ANSI_NULL_DFLT_ON ON" ) . do
447
- client . execute ( "SET ANSI_PADDING ON" ) . do
448
- client . execute ( "SET ANSI_WARNINGS ON" ) . do
449
- else
450
- client . execute ( "SET ANSI_DEFAULTS ON" ) . do
451
- end
452
- client . execute ( "SET QUOTED_IDENTIFIER ON" ) . do
453
- client . execute ( "SET CURSOR_CLOSE_ON_COMMIT OFF" ) . do
454
- client . execute ( "SET IMPLICIT_TRANSACTIONS OFF" ) . do
455
- client . execute ( "SET TEXTSIZE 2147483647" ) . do
456
- client . execute ( "SET CONCAT_NULL_YIELDS_NULL ON" ) . do
457
- end
458
- end
459
-
460
- def config_appname ( config )
461
- config [ :appname ] || configure_application_name || Rails . application . class . name . split ( "::" ) . first rescue nil
462
- end
463
-
464
- def config_login_timeout ( config )
465
- config [ :login_timeout ] . present? ? config [ :login_timeout ] . to_i : nil
466
- end
467
-
468
- def config_timeout ( config )
469
- config [ :timeout ] . present? ? config [ :timeout ] . to_i / 1000 : nil
470
- end
471
-
472
- def config_encoding ( config )
473
- config [ :encoding ] . present? ? config [ :encoding ] : nil
474
- end
475
-
476
- def configure_connection ; end
477
-
478
476
def configure_application_name ; end
479
477
480
478
def initialize_dateformatter
481
479
@database_dateformat = user_options_dateformat
482
480
a , b , c = @database_dateformat . each_char . to_a
481
+
483
482
[ a , b , c ] . each { |f | f . upcase! if f == "y" }
484
483
dateformat = "%#{ a } -%#{ b } -%#{ c } "
485
484
::Date ::DATE_FORMATS [ :_sqlserver_dateformat ] = dateformat
0 commit comments