activerecord-oracle_enhanced-adapter 6.1.0 → 6.1.5

Sign up to get free protection for your applications and to get access to all the features.
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