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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5985d7537ecc79468e80b7ecddf9c8a52309719db665c0b904cb2d04994eb99
4
- data.tar.gz: 0e01cd4d37d2cd9a3f1a48f33b9cdcc9b9adc340a186415cfccb13975693bd3a
3
+ metadata.gz: 4027e6bfee36159c451bc40038402f66298fd8a5fb90a00b63c9c12b407fd7b2
4
+ data.tar.gz: 6515b4272b7b84d14ee1b9280b6357608075091a3779013c8d011177b130a2ac
5
5
  SHA512:
6
- metadata.gz: 58000a64e1d069d9058848a5ecf33474c8ef09ebb7ecf660d9169b5cc4b4a1911e3f8b72f24011801885c333930c378252a8f2bba5ac4051806acde9093a1af3
7
- data.tar.gz: 0c21d8db90ff52720800a717b47f776abf91eded32aec137141e1510453d1eea21e31f291a771df17d7a5957873f2d5479ada8a96aeb4eb24420598080157cfa
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.0
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 /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ owner, table_name, 'TABLE' name_type
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 if value.blank?
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("username" => "SYSTEM", "password" => system_password))
20
+ establish_connection(@config.merge(username: "SYSTEM", password: system_password))
21
21
  begin
22
- connection.execute "CREATE USER #{@config['username']} IDENTIFIED BY #{@config['password']}"
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['username']} IDENTIFIED BY #{@config['password']}"
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['username']}"
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["structure_dump"] == "db_stored_code"
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
- ojdbc_jars = %w(ojdbc8.jar ojdbc7.jar ojdbc6.jar)
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] ||= begin
14
- # if only valid lowercase column characters in name
15
- if /\A[a-z][a-z_0-9\$#]*\Z/.match?(name)
16
- "\"#{name.upcase}\""
17
- else
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 /*+ OPTIMIZER_FEATURES_ENABLE('11.2.0.2') */ synonym_name, table_owner, table_name
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) << structure_dump_fk_constraints
59
- join_with_statement_token(structure) << structure_dump_views
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
- xit "creates user" do
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
- xit "grants permissions defined by OracleEnhancedAdapter.persmissions" do
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.structure_dump_fk_constraints
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.structure_dump_fk_constraints
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.0
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: 2020-12-15 00:00:00.000000000 Z
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.1.4
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/schema_dumper_spec.rb
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/oracle_enhanced/context_index_spec.rb
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/support/create_oracle_enhanced_users.sql
171
- - spec/support/alter_system_user_password.sql
172
- - spec/support/alter_system_set_open_cursors.sql
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