activerecord-sqlserver-adapter 7.1.0.rc1 → 7.1.0.rc2
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/CHANGELOG.md +7 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +3 -0
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +15 -11
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +4 -8
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +1 -1
- data/lib/arel/visitors/sqlserver.rb +32 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddd1e2bb81c9a6675d4a8f561c585869b0fafb6ecfe3c513e7e69d8bc3646d9f
|
4
|
+
data.tar.gz: 0d669eaaa14be843acc19cc887c47a3f8eecfb3552e8477a062df688d9ef1172
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 879aeb90caaef5bb0218651407ec5a978d4a62d51682e92d55fbda2d3eed2fd37e8348e72aa8c4c92cab856c8eebc2fa4bf1c2166ad13d99c983f1310d3b66ab
|
7
|
+
data.tar.gz: 15030862f3ae2044dd780a62f4a8868dc383cd6e9775fcedff214b1429bdbf2881be503e670cf2cbcfcbe92c0583c2a89d53f30ddd988a5425649ff29ef2c971
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## v7.1.0.rc2
|
2
|
+
|
3
|
+
#### Added
|
4
|
+
|
5
|
+
- [#1136](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1136) Prevent marking broken connections as verified
|
6
|
+
- [#1138](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/pull/1138) Cache quoted names
|
7
|
+
|
1
8
|
## v7.1.0.rc1
|
2
9
|
|
3
10
|
#### Added
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ Interested in older versions? We follow a rational versioning policy that tracks
|
|
13
13
|
|
14
14
|
| Adapter Version | Rails Version | Support | Branch |
|
15
15
|
|-----------------|---------------|----------------|-------------------------------------------------------------------------------------------------|
|
16
|
-
| `7.1.0.
|
16
|
+
| `7.1.0.rc2` | `7.1.x` | In development | [main](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/main) |
|
17
17
|
| `7.0.5.1` | `7.0.x` | Active | [7-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/7-0-stable) |
|
18
18
|
| `6.1.3.0` | `6.1.x` | Active | [6-1-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-1-stable) |
|
19
19
|
| `6.0.3` | `6.0.x` | Ended | [6-0-stable](https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/6-0-stable) |
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
7.1.0.
|
1
|
+
7.1.0.rc2
|
@@ -23,6 +23,7 @@ module ActiveRecord
|
|
23
23
|
else
|
24
24
|
internal_raw_execute(sql, conn, perform_do: true)
|
25
25
|
end
|
26
|
+
verified!
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
@@ -50,6 +51,7 @@ module ActiveRecord
|
|
50
51
|
else
|
51
52
|
result = internal_exec_sql_query(sql, conn)
|
52
53
|
end
|
54
|
+
verified!
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
@@ -175,6 +177,7 @@ module ActiveRecord
|
|
175
177
|
log(sql, "Execute Procedure") do
|
176
178
|
with_raw_connection do |conn|
|
177
179
|
result = internal_raw_execute(sql, conn)
|
180
|
+
verified!
|
178
181
|
options = { as: :hash, cache_rows: true, timezone: ActiveRecord.default_timezone || :utc }
|
179
182
|
|
180
183
|
result.each(options) do |row|
|
@@ -4,18 +4,18 @@ module ActiveRecord
|
|
4
4
|
module ConnectionAdapters
|
5
5
|
module SQLServer
|
6
6
|
module Quoting
|
7
|
-
|
8
|
-
|
9
|
-
QUOTED_STRING_PREFIX = "N".freeze
|
7
|
+
QUOTED_COLUMN_NAMES = Concurrent::Map.new # :nodoc:
|
8
|
+
QUOTED_TABLE_NAMES = Concurrent::Map.new # :nodoc:
|
10
9
|
|
11
10
|
def fetch_type_metadata(sql_type, sqlserver_options = {})
|
12
11
|
cast_type = lookup_cast_type(sql_type)
|
12
|
+
|
13
13
|
simple_type = SqlTypeMetadata.new(
|
14
|
-
sql_type:
|
15
|
-
type:
|
16
|
-
limit:
|
14
|
+
sql_type: sql_type,
|
15
|
+
type: cast_type.type,
|
16
|
+
limit: cast_type.limit,
|
17
17
|
precision: cast_type.precision,
|
18
|
-
scale:
|
18
|
+
scale: cast_type.scale
|
19
19
|
)
|
20
20
|
|
21
21
|
SQLServer::TypeMetadata.new(simple_type, **sqlserver_options)
|
@@ -34,7 +34,11 @@ module ActiveRecord
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def quote_column_name(name)
|
37
|
-
SQLServer::Utils.extract_identifiers(name).quoted
|
37
|
+
QUOTED_COLUMN_NAMES[name] ||= SQLServer::Utils.extract_identifiers(name).quoted
|
38
|
+
end
|
39
|
+
|
40
|
+
def quote_table_name(name)
|
41
|
+
QUOTED_TABLE_NAMES[name] ||= SQLServer::Utils.extract_identifiers(name).quoted
|
38
42
|
end
|
39
43
|
|
40
44
|
def quote_default_expression(value, column)
|
@@ -47,7 +51,7 @@ module ActiveRecord
|
|
47
51
|
end
|
48
52
|
|
49
53
|
def quoted_true
|
50
|
-
|
54
|
+
'1'
|
51
55
|
end
|
52
56
|
|
53
57
|
def unquoted_true
|
@@ -55,7 +59,7 @@ module ActiveRecord
|
|
55
59
|
end
|
56
60
|
|
57
61
|
def quoted_false
|
58
|
-
|
62
|
+
'0'
|
59
63
|
end
|
60
64
|
|
61
65
|
def unquoted_false
|
@@ -117,7 +121,7 @@ module ActiveRecord
|
|
117
121
|
when ActiveRecord::Type::SQLServer::Data
|
118
122
|
value.quoted
|
119
123
|
when String, ActiveSupport::Multibyte::Chars
|
120
|
-
"#{
|
124
|
+
"N#{super}"
|
121
125
|
else
|
122
126
|
super
|
123
127
|
end
|
@@ -6,13 +6,9 @@ module ActiveRecord
|
|
6
6
|
module ConnectionAdapters
|
7
7
|
module SQLServer
|
8
8
|
module Utils
|
9
|
-
QUOTED_STRING_PREFIX = "N"
|
10
|
-
|
11
9
|
# Value object to return identifiers from SQL Server names http://bit.ly/1CZ3EiL
|
12
10
|
# Inspired from Rails PostgreSQL::Name adapter object in their own Utils.
|
13
|
-
#
|
14
11
|
class Name
|
15
|
-
SEPARATOR = "."
|
16
12
|
UNQUOTED_SCANNER = /\]?\./
|
17
13
|
QUOTED_SCANNER = /\A\[.*?\]\./
|
18
14
|
QUOTED_CHECKER = /\A\[/
|
@@ -42,7 +38,7 @@ module ActiveRecord
|
|
42
38
|
end
|
43
39
|
|
44
40
|
def fully_qualified_database_quoted
|
45
|
-
[server_quoted, database_quoted].compact.join(
|
41
|
+
[server_quoted, database_quoted].compact.join('.')
|
46
42
|
end
|
47
43
|
|
48
44
|
def fully_qualified?
|
@@ -69,7 +65,7 @@ module ActiveRecord
|
|
69
65
|
end
|
70
66
|
|
71
67
|
def quoted
|
72
|
-
parts.map { |p| quote(p) if p }.join
|
68
|
+
parts.map { |p| quote(p) if p }.join('.')
|
73
69
|
end
|
74
70
|
|
75
71
|
def quoted_raw
|
@@ -132,7 +128,7 @@ module ActiveRecord
|
|
132
128
|
extend self
|
133
129
|
|
134
130
|
def quote_string(s)
|
135
|
-
s.to_s.gsub
|
131
|
+
s.to_s.gsub(/\'/, "''")
|
136
132
|
end
|
137
133
|
|
138
134
|
def quote_string_single(s)
|
@@ -140,7 +136,7 @@ module ActiveRecord
|
|
140
136
|
end
|
141
137
|
|
142
138
|
def quote_string_single_national(s)
|
143
|
-
"
|
139
|
+
"N'#{quote_string(s)}'"
|
144
140
|
end
|
145
141
|
|
146
142
|
def quoted_raw(name)
|
@@ -64,6 +64,38 @@ module Arel
|
|
64
64
|
super
|
65
65
|
end
|
66
66
|
|
67
|
+
def visit_Arel_Nodes_HomogeneousIn(o, collector)
|
68
|
+
collector.preparable = false
|
69
|
+
|
70
|
+
visit o.left, collector
|
71
|
+
|
72
|
+
if o.type == :in
|
73
|
+
collector << " IN ("
|
74
|
+
else
|
75
|
+
collector << " NOT IN ("
|
76
|
+
end
|
77
|
+
|
78
|
+
values = o.casted_values
|
79
|
+
|
80
|
+
# Monkey-patch start.
|
81
|
+
column_name = o.attribute.name
|
82
|
+
column_type = o.attribute.relation.type_for_attribute(column_name)
|
83
|
+
column_type = column_type.cast_type if column_type.is_a?(ActiveRecord::Encryption::EncryptedAttributeType) # Use cast_type on encrypted attributes. Don't encrypt them again
|
84
|
+
|
85
|
+
if values.empty?
|
86
|
+
collector << @connection.quote(nil)
|
87
|
+
elsif @connection.prepared_statements && !column_type.serialized?
|
88
|
+
# Add query attribute bindings rather than just values.
|
89
|
+
attrs = values.map { |value| ActiveRecord::Relation::QueryAttribute.new(column_name, value, column_type) }
|
90
|
+
collector.add_binds(attrs, &bind_block)
|
91
|
+
else
|
92
|
+
collector.add_binds(values, o.proc_for_binds, &bind_block)
|
93
|
+
end
|
94
|
+
# Monkey-patch end.
|
95
|
+
|
96
|
+
collector << ")"
|
97
|
+
end
|
98
|
+
|
67
99
|
def visit_Arel_Nodes_SelectStatement(o, collector)
|
68
100
|
@select_statement = o
|
69
101
|
distinct_One_As_One_Is_So_Not_Fetch o
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-sqlserver-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.0.
|
4
|
+
version: 7.1.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ken Collins
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2023-11-
|
18
|
+
date: 2023-11-14 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: activerecord
|
@@ -235,8 +235,8 @@ licenses:
|
|
235
235
|
- MIT
|
236
236
|
metadata:
|
237
237
|
bug_tracker_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues
|
238
|
-
changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v7.1.0.
|
239
|
-
source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v7.1.0.
|
238
|
+
changelog_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/blob/v7.1.0.rc2/CHANGELOG.md
|
239
|
+
source_code_uri: https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/tree/v7.1.0.rc2
|
240
240
|
post_install_message:
|
241
241
|
rdoc_options: []
|
242
242
|
require_paths:
|