activerecord-oracle_enhanced-adapter 6.1.0 → 6.1.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/History.md +56 -0
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/connection.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/database_statements.rb +3 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/database_tasks.rb +5 -5
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +6 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/quoting.rb +5 -8
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/structure_dump.rb +3 -2
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +1 -1
- data/spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb +2 -2
- data/spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb +2 -2
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +39 -0
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4027e6bfee36159c451bc40038402f66298fd8a5fb90a00b63c9c12b407fd7b2
|
4
|
+
data.tar.gz: 6515b4272b7b84d14ee1b9280b6357608075091a3779013c8d011177b130a2ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3806da0e1d87fe593e90b7256c40699448483ab21dc8da9a3dbb829b7431f264ad6ae11a823d300a226d4c6e2eda1145656e2ed95dcbc9d049dd9a97be530fa
|
7
|
+
data.tar.gz: 668740aad129f15b371627f5fe60370a3f09ebfe08bdebe70a325ad6637c3523682daab1984986bccc6798b6a8e7ee760fc79d9155871209d9e063120ee87e71
|
data/History.md
CHANGED
@@ -1,3 +1,59 @@
|
|
1
|
+
## 6.1.5 / 2021-12-07
|
2
|
+
|
3
|
+
* Changes and bug fixes
|
4
|
+
* get root cause if something went wrong with jdbc.OracleDriver [#2180 #2181]
|
5
|
+
|
6
|
+
* CI
|
7
|
+
* Bump CRuby versions at Travis CI for release61 branch [#2192]
|
8
|
+
|
9
|
+
## 6.1.4 / 2021-04-01
|
10
|
+
|
11
|
+
* Changes and bug fixes
|
12
|
+
* Support use of ojdbc11.jar [#2155, #2168]
|
13
|
+
* Add missing default granted permission "ulimited tablespace" [#2156, #2167]
|
14
|
+
* Prevent from including ojdbc8.jar file to gem file [#2163, #2164, #2165]
|
15
|
+
* Oracle enhanced adapter 6.1.3 has been yanked since #2163
|
16
|
+
|
17
|
+
* CI
|
18
|
+
* Allow-failure CI against jruby-head for release61 branch [#2166]
|
19
|
+
|
20
|
+
## 6.1.3 / 2021-03-31
|
21
|
+
|
22
|
+
* Changes and bug fixes
|
23
|
+
* Address FrozenError (can't modify frozen Hash): error [#2139 #2151 #2160]
|
24
|
+
|
25
|
+
* CI
|
26
|
+
* CI against JRuby 9.2.15.0 [#2150]
|
27
|
+
|
28
|
+
## 6.1.2 / 2021-02-10
|
29
|
+
* Changes and bug fixes
|
30
|
+
* Fixed ORA-01935: missing user or role name with config read issue [#1943 #2135, #2142]
|
31
|
+
|
32
|
+
## 6.1.1 / 2021-01-14
|
33
|
+
|
34
|
+
* Changes and bug fixes
|
35
|
+
* Remove /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ hint for all_synonyms [#2110, #2119]
|
36
|
+
* Fix write_lobs Invalid byte sequence in UTF-8 [#2097, #2111]
|
37
|
+
* Ensure FKs are properly included in structure dumps [#2109, #2113]
|
38
|
+
|
39
|
+
* CI
|
40
|
+
* CI against JRuby 9.2.14.0 [#2085]
|
41
|
+
* CI against Ruby 3.0.0 [#2091, #2092]
|
42
|
+
* Address Travis CI warnings and bump Ubuntu version to 20.04 [#2086]
|
43
|
+
* Exclude `ruby-head` and `ruby-debug` until minitest allows Ruby 3.1 #2094, #2095
|
44
|
+
* CI against Ruby 3.0.0 at Travis CI [#2093]
|
45
|
+
|
46
|
+
## 6.1.0 / 2020-12-15
|
47
|
+
|
48
|
+
* Changes and bug fixes
|
49
|
+
* Support Rails 6.1.0
|
50
|
+
* Update bug report templates for Oracle enhanced adapter 6.1 [#2063]
|
51
|
+
* Use released version of rake [#2065 #2066]
|
52
|
+
* Add /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ hint to address slow SCHEMA queries [#2055, #2068]
|
53
|
+
* `build_subselect` does not have ordering [#2070]
|
54
|
+
* Remove `visit_Arel_Nodes_NotIn` and `visit_Arel_Nodes_In` visitors [#2075, #2077]
|
55
|
+
* `NOT IN` clause needs separated by `AND` [#2079, #2081]
|
56
|
+
|
1
57
|
## 6.1.0.rc1 / 2020-11-03
|
2
58
|
|
3
59
|
* Changes and bug fixes
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.1.
|
1
|
+
6.1.5
|
@@ -34,7 +34,7 @@ module ActiveRecord
|
|
34
34
|
table_owner, table_name = default_owner, real_name
|
35
35
|
end
|
36
36
|
sql = <<~SQL.squish
|
37
|
-
SELECT
|
37
|
+
SELECT owner, table_name, 'TABLE' name_type
|
38
38
|
FROM all_tables
|
39
39
|
WHERE owner = '#{table_owner}'
|
40
40
|
AND table_name = '#{table_name}'
|
@@ -254,9 +254,11 @@ module ActiveRecord
|
|
254
254
|
columns.each do |col|
|
255
255
|
value = attributes[col.name]
|
256
256
|
# changed sequence of next two lines - should check if value is nil before converting to yaml
|
257
|
-
next
|
257
|
+
next unless value
|
258
258
|
if klass.attribute_types[col.name].is_a? Type::Serialized
|
259
259
|
value = klass.attribute_types[col.name].serialize(value)
|
260
|
+
# value can be nil after serialization because ActiveRecord serializes [] and {} as nil
|
261
|
+
next unless value
|
260
262
|
end
|
261
263
|
uncached do
|
262
264
|
unless lob_record = select_one(sql = <<~SQL.squish, "Writable Large Object")
|
@@ -17,19 +17,19 @@ module ActiveRecord
|
|
17
17
|
print "Please provide the SYSTEM password for your Oracle installation (set ORACLE_SYSTEM_PASSWORD to avoid this prompt)\n>"
|
18
18
|
$stdin.gets.strip
|
19
19
|
}
|
20
|
-
establish_connection(@config.merge(
|
20
|
+
establish_connection(@config.merge(username: "SYSTEM", password: system_password))
|
21
21
|
begin
|
22
|
-
connection.execute "CREATE USER #{@config[
|
22
|
+
connection.execute "CREATE USER #{@config[:username]} IDENTIFIED BY #{@config[:password]}"
|
23
23
|
rescue => e
|
24
24
|
if /ORA-01920/.match?(e.message) # user name conflicts with another user or role name
|
25
|
-
connection.execute "ALTER USER #{@config[
|
25
|
+
connection.execute "ALTER USER #{@config[:username]} IDENTIFIED BY #{@config[:password]}"
|
26
26
|
else
|
27
27
|
raise e
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
OracleEnhancedAdapter.permissions.each do |permission|
|
32
|
-
connection.execute "GRANT #{permission} TO #{@config[
|
32
|
+
connection.execute "GRANT #{permission} TO #{@config[:username]}"
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -46,7 +46,7 @@ module ActiveRecord
|
|
46
46
|
def structure_dump(filename, extra_flags)
|
47
47
|
establish_connection(@config)
|
48
48
|
File.open(filename, "w:utf-8") { |f| f << connection.structure_dump }
|
49
|
-
if @config[
|
49
|
+
if @config[:structure_dump] == "db_stored_code"
|
50
50
|
File.open(filename, "a") { |f| f << connection.structure_dump_db_stored_code }
|
51
51
|
end
|
52
52
|
end
|
@@ -16,7 +16,8 @@ begin
|
|
16
16
|
# Oracle 11g client ojdbc6.jar is also compatible with Java 1.7
|
17
17
|
# Oracle 12c Release 1 client provides ojdbc7.jar
|
18
18
|
# Oracle 12c Release 2 client provides ojdbc8.jar
|
19
|
-
|
19
|
+
# Oracle 21c provides ojdbc11.jar for Java 11 and above
|
20
|
+
ojdbc_jars = %w(ojdbc11.jar ojdbc8.jar ojdbc7.jar ojdbc6.jar)
|
20
21
|
|
21
22
|
if !ENV_JAVA["java.class.path"]&.match?(Regexp.new(ojdbc_jars.join("|")))
|
22
23
|
# On Unix environment variable should be PATH, on Windows it is sometimes Path
|
@@ -42,9 +43,9 @@ begin
|
|
42
43
|
java.lang.System.set_property("oracle.net.tns_admin", ENV["TNS_ADMIN"])
|
43
44
|
end
|
44
45
|
|
45
|
-
rescue LoadError, NameError
|
46
|
+
rescue LoadError, NameError => e
|
46
47
|
# JDBC driver is unavailable.
|
47
|
-
raise LoadError, "ERROR: ActiveRecord oracle_enhanced adapter could not load Oracle JDBC driver. Please install #{ojdbc_jars.join(' or ') } library."
|
48
|
+
raise LoadError, "ERROR: ActiveRecord oracle_enhanced adapter could not load Oracle JDBC driver. Please install #{ojdbc_jars.join(' or ') } library.\n#{e.class}:#{e.message}"
|
48
49
|
end
|
49
50
|
|
50
51
|
module ActiveRecord
|
@@ -98,6 +99,8 @@ module ActiveRecord
|
|
98
99
|
@raw_connection = @raw_connection.underlying_connection
|
99
100
|
end
|
100
101
|
|
102
|
+
# Workaround FrozenError (can't modify frozen Hash):
|
103
|
+
config = config.dup
|
101
104
|
config[:driver] ||= @raw_connection.meta_data.connection.java_class.name
|
102
105
|
username = @raw_connection.meta_data.user_name
|
103
106
|
else
|
@@ -10,14 +10,11 @@ module ActiveRecord
|
|
10
10
|
|
11
11
|
def quote_column_name(name) #:nodoc:
|
12
12
|
name = name.to_s
|
13
|
-
self.class.quoted_column_names[name] ||=
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
# remove double quotes which cannot be used inside quoted identifier
|
19
|
-
"\"#{name.gsub('"', '')}\""
|
20
|
-
end
|
13
|
+
self.class.quoted_column_names[name] ||= if /\A[a-z][a-z_0-9\$#]*\Z/.match?(name)
|
14
|
+
"\"#{name.upcase}\""
|
15
|
+
else
|
16
|
+
# remove double quotes which cannot be used inside quoted identifier
|
17
|
+
"\"#{name.gsub('"', '')}\""
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
@@ -76,7 +76,7 @@ module ActiveRecord
|
|
76
76
|
# get synonyms for schema dump
|
77
77
|
def synonyms
|
78
78
|
result = select_all(<<~SQL.squish, "SCHEMA")
|
79
|
-
SELECT
|
79
|
+
SELECT synonym_name, table_owner, table_name
|
80
80
|
FROM all_synonyms where owner = SYS_CONTEXT('userenv', 'current_schema')
|
81
81
|
SQL
|
82
82
|
|
@@ -55,8 +55,9 @@ module ActiveRecord #:nodoc:
|
|
55
55
|
structure << structure_dump_column_comments(table_name)
|
56
56
|
end
|
57
57
|
|
58
|
-
join_with_statement_token(structure) <<
|
59
|
-
|
58
|
+
join_with_statement_token(structure) <<
|
59
|
+
structure_dump_fk_constraints <<
|
60
|
+
structure_dump_views
|
60
61
|
end
|
61
62
|
|
62
63
|
def structure_dump_column(column) #:nodoc:
|
@@ -226,7 +226,7 @@ module ActiveRecord
|
|
226
226
|
# ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.permissions =
|
227
227
|
# ["create session", "create table", "create view", "create sequence", "create trigger", "ctxapp"]
|
228
228
|
cattr_accessor :permissions
|
229
|
-
self.permissions = ["create session", "create table", "create view", "create sequence"]
|
229
|
+
self.permissions = ["unlimited tablespace", "create session", "create table", "create view", "create sequence"]
|
230
230
|
|
231
231
|
##
|
232
232
|
# :singleton-method:
|
@@ -16,11 +16,11 @@ describe "Oracle Enhanced adapter database tasks" do
|
|
16
16
|
ActiveRecord::Tasks::DatabaseTasks.create(new_user_config)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
it "creates user" do
|
20
20
|
query = "SELECT COUNT(*) FROM dba_users WHERE UPPER(username) = '#{new_user_config[:username].upcase}'"
|
21
21
|
expect(ActiveRecord::Base.connection.select_value(query)).to eq(1)
|
22
22
|
end
|
23
|
-
|
23
|
+
it "grants permissions defined by OracleEnhancedAdapter.persmissions" do
|
24
24
|
query = "SELECT COUNT(*) FROM DBA_SYS_PRIVS WHERE GRANTEE = '#{new_user_config[:username].upcase}'"
|
25
25
|
permissions_count = ActiveRecord::ConnectionAdapters::OracleEnhancedAdapter.permissions.size
|
26
26
|
expect(ActiveRecord::Base.connection.select_value(query)).to eq(permissions_count)
|
@@ -66,7 +66,7 @@ describe "OracleEnhancedAdapter structure dump" do
|
|
66
66
|
ALTER TABLE TEST_POSTS
|
67
67
|
ADD CONSTRAINT fk_test_post_foo FOREIGN KEY (foo_id) REFERENCES foos(id)
|
68
68
|
SQL
|
69
|
-
dump = ActiveRecord::Base.connection.
|
69
|
+
dump = ActiveRecord::Base.connection.structure_dump
|
70
70
|
expect(dump.split('\n').length).to eq(1)
|
71
71
|
expect(dump).to match(/ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_FOO\"? FOREIGN KEY \(\"?FOO_ID\"?\) REFERENCES \"?FOOS\"?\(\"?ID\"?\)/i)
|
72
72
|
end
|
@@ -86,7 +86,7 @@ describe "OracleEnhancedAdapter structure dump" do
|
|
86
86
|
ADD CONSTRAINT fk_test_post_baz FOREIGN KEY (baz_id) REFERENCES foos(baz_id)
|
87
87
|
SQL
|
88
88
|
|
89
|
-
dump = ActiveRecord::Base.connection.
|
89
|
+
dump = ActiveRecord::Base.connection.structure_dump
|
90
90
|
expect(dump.split('\n').length).to eq(1)
|
91
91
|
expect(dump).to match(/ALTER TABLE \"?TEST_POSTS\"? ADD CONSTRAINT \"?FK_TEST_POST_BAZ\"? FOREIGN KEY \(\"?BAZ_ID\"?\) REFERENCES \"?FOOS\"?\(\"?BAZ_ID\"?\)/i)
|
92
92
|
end
|
@@ -479,6 +479,45 @@ describe "OracleEnhancedAdapter" do
|
|
479
479
|
end
|
480
480
|
end
|
481
481
|
|
482
|
+
describe "Binary lob column" do
|
483
|
+
before(:all) do
|
484
|
+
schema_define do
|
485
|
+
create_table :test_binary_columns do |t|
|
486
|
+
t.binary :attachment
|
487
|
+
end
|
488
|
+
end
|
489
|
+
class ::TestBinaryColumn < ActiveRecord::Base
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
after(:all) do
|
494
|
+
schema_define do
|
495
|
+
drop_table :test_binary_columns
|
496
|
+
end
|
497
|
+
Object.send(:remove_const, "TestBinaryColumn")
|
498
|
+
ActiveRecord::Base.table_name_prefix = nil
|
499
|
+
ActiveRecord::Base.clear_cache!
|
500
|
+
end
|
501
|
+
|
502
|
+
before(:each) do
|
503
|
+
set_logger
|
504
|
+
end
|
505
|
+
|
506
|
+
after(:each) do
|
507
|
+
clear_logger
|
508
|
+
end
|
509
|
+
|
510
|
+
it "should serialize with non UTF-8 data" do
|
511
|
+
binary_value = +"Hello \x93\xfa\x96\x7b"
|
512
|
+
binary_value.force_encoding "UTF-8"
|
513
|
+
|
514
|
+
binary_column_object = TestBinaryColumn.new
|
515
|
+
binary_column_object.attachment = binary_value
|
516
|
+
|
517
|
+
expect(binary_column_object.save!).to eq(true)
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
482
521
|
describe "quoting" do
|
483
522
|
before(:all) do
|
484
523
|
schema_define do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-oracle_enhanced-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.
|
4
|
+
version: 6.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raimonds Simanovskis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -137,38 +137,38 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 1.8.11
|
139
139
|
requirements: []
|
140
|
-
rubygems_version: 3.
|
140
|
+
rubygems_version: 3.2.32
|
141
141
|
signing_key:
|
142
142
|
specification_version: 4
|
143
143
|
summary: Oracle enhanced adapter for ActiveRecord
|
144
144
|
test_files:
|
145
|
-
- spec/active_record/oracle_enhanced/type/dirty_spec.rb
|
146
|
-
- spec/active_record/oracle_enhanced/type/national_character_text_spec.rb
|
147
|
-
- spec/active_record/oracle_enhanced/type/raw_spec.rb
|
148
|
-
- spec/active_record/oracle_enhanced/type/float_spec.rb
|
149
|
-
- spec/active_record/oracle_enhanced/type/decimal_spec.rb
|
150
|
-
- spec/active_record/oracle_enhanced/type/character_string_spec.rb
|
151
|
-
- spec/active_record/oracle_enhanced/type/boolean_spec.rb
|
152
|
-
- spec/active_record/oracle_enhanced/type/json_spec.rb
|
153
|
-
- spec/active_record/oracle_enhanced/type/binary_spec.rb
|
154
|
-
- spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
|
155
|
-
- spec/active_record/oracle_enhanced/type/timestamp_spec.rb
|
156
|
-
- spec/active_record/oracle_enhanced/type/integer_spec.rb
|
157
|
-
- spec/active_record/oracle_enhanced/type/text_spec.rb
|
158
|
-
- spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb
|
159
145
|
- spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb
|
160
|
-
- spec/active_record/connection_adapters/oracle_enhanced/
|
146
|
+
- spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb
|
147
|
+
- spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb
|
161
148
|
- spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb
|
149
|
+
- spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb
|
150
|
+
- spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb
|
162
151
|
- spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb
|
152
|
+
- spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb
|
163
153
|
- spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb
|
164
|
-
- spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb
|
165
154
|
- spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb
|
166
|
-
- spec/active_record/connection_adapters/
|
167
|
-
- spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb
|
168
|
-
- spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb
|
155
|
+
- spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb
|
169
156
|
- spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb
|
170
|
-
- spec/
|
171
|
-
- spec/
|
172
|
-
- spec/
|
157
|
+
- spec/active_record/oracle_enhanced/type/binary_spec.rb
|
158
|
+
- spec/active_record/oracle_enhanced/type/boolean_spec.rb
|
159
|
+
- spec/active_record/oracle_enhanced/type/character_string_spec.rb
|
160
|
+
- spec/active_record/oracle_enhanced/type/decimal_spec.rb
|
161
|
+
- spec/active_record/oracle_enhanced/type/dirty_spec.rb
|
162
|
+
- spec/active_record/oracle_enhanced/type/float_spec.rb
|
163
|
+
- spec/active_record/oracle_enhanced/type/integer_spec.rb
|
164
|
+
- spec/active_record/oracle_enhanced/type/json_spec.rb
|
165
|
+
- spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
|
166
|
+
- spec/active_record/oracle_enhanced/type/national_character_text_spec.rb
|
167
|
+
- spec/active_record/oracle_enhanced/type/raw_spec.rb
|
168
|
+
- spec/active_record/oracle_enhanced/type/text_spec.rb
|
169
|
+
- spec/active_record/oracle_enhanced/type/timestamp_spec.rb
|
173
170
|
- spec/spec_config.yaml.template
|
174
171
|
- spec/spec_helper.rb
|
172
|
+
- spec/support/alter_system_set_open_cursors.sql
|
173
|
+
- spec/support/alter_system_user_password.sql
|
174
|
+
- spec/support/create_oracle_enhanced_users.sql
|