activerecord-oracle_enhanced-adapter 5.2.2 → 5.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.md +12 -0
- data/VERSION +1 -1
- data/lib/active_record/connection_adapters/oracle_enhanced/jdbc_connection.rb +2 -2
- data/lib/active_record/connection_adapters/oracle_enhanced/oci_connection.rb +2 -2
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +22 -1
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +5 -0
- data/spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb +5 -5
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +5 -3
- metadata +18 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99ba62aedd6e50d8e73857481e9571fe6d32bcf54e63ad71efb585a41ee46de3
|
4
|
+
data.tar.gz: a328430116e7ff784117e6281e6ed7be5bc3df51ea9425d49cf3304bc0730ccf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec5c2229cc8ec228ae600373f107a4dd325913c7940f9668462148bda65380818ee7ac5eaf369e042c54cda30c44ad1934cd9aa0429a783c2c723869c036066b
|
7
|
+
data.tar.gz: 566e26dc8d096883fff8409fce90160706e1ae18f4e4779cd2f83ff58657f2a91f2e93ad552068717d242af38ed70403264b6b6bf1d87b7d354bf7c61f5309d9
|
data/History.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## 5.2.3 / 2018-08-08
|
2
|
+
|
3
|
+
* Changes and bug fixes
|
4
|
+
* Introduce column cache per connection [#1744 #1750]
|
5
|
+
* Use `cursor_sharing` = force by default again [#1745 #1748]
|
6
|
+
* Add `table_name` search condition to `indexes(table_name)` method [#1747 #1749]
|
7
|
+
* Suppress warning `BigDecimal.new` is deprecated [#1742 #1743]
|
8
|
+
* Do not install bundler explicitly [#1725 #1726]
|
9
|
+
* Add `allow_railures` for jruby-head until #1737 resolved [#1739 #1740]
|
10
|
+
* CI against JRuby 9.2.0.0 [#1728 #1741]
|
11
|
+
* Do not run CI against older version of JRuby [#1741]
|
12
|
+
|
1
13
|
## 5.2.2 / 2018-04-28
|
2
14
|
|
3
15
|
* Changes and bug fixes
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
5.2.
|
1
|
+
5.2.3
|
@@ -150,7 +150,7 @@ module ActiveRecord
|
|
150
150
|
# @raw_connection.setDefaultRowPrefetch(prefetch_rows) if prefetch_rows
|
151
151
|
end
|
152
152
|
|
153
|
-
cursor_sharing = config[:cursor_sharing]
|
153
|
+
cursor_sharing = config[:cursor_sharing] || "force"
|
154
154
|
exec "alter session set cursor_sharing = #{cursor_sharing}" if cursor_sharing
|
155
155
|
|
156
156
|
# Initialize NLS parameters
|
@@ -476,7 +476,7 @@ module ActiveRecord
|
|
476
476
|
elsif d.isInt
|
477
477
|
Integer(d.stringValue)
|
478
478
|
else
|
479
|
-
BigDecimal
|
479
|
+
BigDecimal(d.stringValue)
|
480
480
|
end
|
481
481
|
when :BINARY_FLOAT
|
482
482
|
rset.getFloat(i)
|
@@ -124,7 +124,7 @@ module ActiveRecord
|
|
124
124
|
when Type::OracleEnhanced::Raw
|
125
125
|
@raw_cursor.bind_param(position, OracleEnhanced::Quoting.encode_raw(value))
|
126
126
|
when ActiveModel::Type::Decimal
|
127
|
-
@raw_cursor.bind_param(position, BigDecimal
|
127
|
+
@raw_cursor.bind_param(position, BigDecimal(value.to_s))
|
128
128
|
when NilClass
|
129
129
|
@raw_cursor.bind_param(position, nil, String)
|
130
130
|
else
|
@@ -295,7 +295,7 @@ module ActiveRecord
|
|
295
295
|
privilege = config[:privilege] && config[:privilege].to_sym
|
296
296
|
async = config[:allow_concurrency]
|
297
297
|
prefetch_rows = config[:prefetch_rows] || 100
|
298
|
-
cursor_sharing = config[:cursor_sharing]
|
298
|
+
cursor_sharing = config[:cursor_sharing] || "force"
|
299
299
|
# get session time_zone from configuration or from TZ environment variable
|
300
300
|
time_zone = config[:time_zone] || ENV["TZ"]
|
301
301
|
|
@@ -83,7 +83,7 @@ module ActiveRecord
|
|
83
83
|
(owner, table_name, db_link) = @connection.describe(table_name)
|
84
84
|
default_tablespace_name = default_tablespace
|
85
85
|
|
86
|
-
result = select_all(<<-SQL.strip.gsub(/\s+/, " "), "indexes", [bind_string("owner", owner), bind_string("owner", owner)])
|
86
|
+
result = select_all(<<-SQL.strip.gsub(/\s+/, " "), "indexes", [bind_string("owner", owner), bind_string("owner", owner), bind_string("table_name", table_name)])
|
87
87
|
SELECT LOWER(i.table_name) AS table_name, LOWER(i.index_name) AS index_name, i.uniqueness,
|
88
88
|
i.index_type, i.ityp_owner, i.ityp_name, i.parameters,
|
89
89
|
LOWER(i.tablespace_name) AS tablespace_name,
|
@@ -97,6 +97,7 @@ module ActiveRecord
|
|
97
97
|
c.column_name = atc.column_name AND i.owner = atc.owner AND atc.hidden_column = 'NO'
|
98
98
|
WHERE i.owner = :owner
|
99
99
|
AND i.table_owner = :owner
|
100
|
+
AND i.table_name = :table_name
|
100
101
|
AND NOT EXISTS (SELECT uc.index_name FROM all_constraints uc
|
101
102
|
WHERE uc.index_name = i.index_name AND uc.owner = i.owner AND uc.constraint_type = 'P')
|
102
103
|
ORDER BY i.index_name, c.column_position
|
@@ -152,6 +153,14 @@ module ActiveRecord
|
|
152
153
|
all_schema_indexes.select { |i| i.table == table_name }
|
153
154
|
end
|
154
155
|
|
156
|
+
def columns(table_name)
|
157
|
+
table_name = table_name.to_s
|
158
|
+
if @columns_cache[table_name]
|
159
|
+
@columns_cache[table_name]
|
160
|
+
else
|
161
|
+
@columns_cache[table_name] = super(table_name)
|
162
|
+
end
|
163
|
+
end
|
155
164
|
# Additional options for +create_table+ method in migration files.
|
156
165
|
#
|
157
166
|
# You can specify individual starting value in table creation migration file, e.g.:
|
@@ -248,6 +257,8 @@ module ActiveRecord
|
|
248
257
|
execute "DROP SEQUENCE #{quote_table_name(seq_name)}" rescue nil
|
249
258
|
rescue ActiveRecord::StatementInvalid => e
|
250
259
|
raise e unless options[:if_exists]
|
260
|
+
ensure
|
261
|
+
clear_table_columns_cache(table_name)
|
251
262
|
end
|
252
263
|
|
253
264
|
def insert_versions_sql(versions) # :nodoc:
|
@@ -398,6 +409,8 @@ module ActiveRecord
|
|
398
409
|
execute add_column_sql
|
399
410
|
create_sequence_and_trigger(table_name, options) if type && type.to_sym == :primary_key
|
400
411
|
change_column_comment(table_name, column_name, options[:comment]) if options.key?(:comment)
|
412
|
+
ensure
|
413
|
+
clear_table_columns_cache(table_name)
|
401
414
|
end
|
402
415
|
|
403
416
|
def aliased_types(name, fallback)
|
@@ -407,6 +420,8 @@ module ActiveRecord
|
|
407
420
|
def change_column_default(table_name, column_name, default_or_changes) #:nodoc:
|
408
421
|
default = extract_new_default_value(default_or_changes)
|
409
422
|
execute "ALTER TABLE #{quote_table_name(table_name)} MODIFY #{quote_column_name(column_name)} DEFAULT #{quote(default)}"
|
423
|
+
ensure
|
424
|
+
clear_table_columns_cache(table_name)
|
410
425
|
end
|
411
426
|
|
412
427
|
def change_column_null(table_name, column_name, null, default = nil) #:nodoc:
|
@@ -439,15 +454,21 @@ module ActiveRecord
|
|
439
454
|
execute(change_column_sql)
|
440
455
|
|
441
456
|
change_column_comment(table_name, column_name, options[:comment]) if options.key?(:comment)
|
457
|
+
ensure
|
458
|
+
clear_table_columns_cache(table_name)
|
442
459
|
end
|
443
460
|
|
444
461
|
def rename_column(table_name, column_name, new_column_name) #:nodoc:
|
445
462
|
execute "ALTER TABLE #{quote_table_name(table_name)} RENAME COLUMN #{quote_column_name(column_name)} to #{quote_column_name(new_column_name)}"
|
446
463
|
rename_column_indexes(table_name, column_name, new_column_name)
|
464
|
+
ensure
|
465
|
+
clear_table_columns_cache(table_name)
|
447
466
|
end
|
448
467
|
|
449
468
|
def remove_column(table_name, column_name, type = nil, options = {}) #:nodoc:
|
450
469
|
execute "ALTER TABLE #{quote_table_name(table_name)} DROP COLUMN #{quote_column_name(column_name)} CASCADE CONSTRAINTS"
|
470
|
+
ensure
|
471
|
+
clear_table_columns_cache(table_name)
|
451
472
|
end
|
452
473
|
|
453
474
|
def change_table_comment(table_name, comment)
|
@@ -213,6 +213,7 @@ module ActiveRecord
|
|
213
213
|
@statements = StatementPool.new(self.class.type_cast_config_to_integer(config[:statement_limit]))
|
214
214
|
@enable_dbms_output = false
|
215
215
|
@do_not_prefetch_primary_key = {}
|
216
|
+
@columns_cache = {}
|
216
217
|
end
|
217
218
|
|
218
219
|
ADAPTER_NAME = "OracleEnhanced".freeze
|
@@ -541,6 +542,10 @@ module ActiveRecord
|
|
541
542
|
SQL
|
542
543
|
end
|
543
544
|
|
545
|
+
def clear_table_columns_cache(table_name)
|
546
|
+
@columns_cache[table_name.to_s] = nil
|
547
|
+
end
|
548
|
+
|
544
549
|
# Find a table's primary key and sequence.
|
545
550
|
# *Note*: Only primary key is implemented - sequence will be nil.
|
546
551
|
def pk_and_sequence_for(table_name, owner = nil, desc_table_name = nil, db_link = nil) #:nodoc:
|
@@ -31,15 +31,15 @@ describe "OracleEnhancedAdapter establish connection" do
|
|
31
31
|
expect(ActiveRecord::Base.connection).to be_active
|
32
32
|
end
|
33
33
|
|
34
|
-
it "should use database default cursor_sharing parameter value
|
34
|
+
it "should use database default cursor_sharing parameter value force by default" do
|
35
35
|
# Use `SYSTEM_CONNECTION_PARAMS` to query v$parameter
|
36
36
|
ActiveRecord::Base.establish_connection(SYSTEM_CONNECTION_PARAMS)
|
37
|
-
expect(ActiveRecord::Base.connection.select_value("select value from v$parameter where name = 'cursor_sharing'")).to eq("
|
37
|
+
expect(ActiveRecord::Base.connection.select_value("select value from v$parameter where name = 'cursor_sharing'")).to eq("FORCE")
|
38
38
|
end
|
39
39
|
|
40
|
-
it "should use modified cursor_sharing value
|
41
|
-
ActiveRecord::Base.establish_connection(SYSTEM_CONNECTION_PARAMS.merge(cursor_sharing: :
|
42
|
-
expect(ActiveRecord::Base.connection.select_value("select value from v$parameter where name = 'cursor_sharing'")).to eq("
|
40
|
+
it "should use modified cursor_sharing value exact" do
|
41
|
+
ActiveRecord::Base.establish_connection(SYSTEM_CONNECTION_PARAMS.merge(cursor_sharing: :exact))
|
42
|
+
expect(ActiveRecord::Base.connection.select_value("select value from v$parameter where name = 'cursor_sharing'")).to eq("EXACT")
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -67,15 +67,16 @@ describe "OracleEnhancedAdapter" do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should get columns from database at first time" do
|
70
|
+
@conn.clear_table_columns_cache(:test_employees)
|
70
71
|
expect(TestEmployee.connection.columns("test_employees").map(&:name)).to eq(@column_names)
|
71
72
|
expect(@logger.logged(:debug).last).to match(/select .* from all_tab_cols/im)
|
72
73
|
end
|
73
74
|
|
74
|
-
it "should get columns from database at second time" do
|
75
|
+
it "should not get columns from database at second time" do
|
75
76
|
TestEmployee.connection.columns("test_employees")
|
76
77
|
@logger.clear(:debug)
|
77
78
|
expect(TestEmployee.connection.columns("test_employees").map(&:name)).to eq(@column_names)
|
78
|
-
expect(@logger.logged(:debug).last).
|
79
|
+
expect(@logger.logged(:debug).last).not_to match(/select .* from all_tab_cols/im)
|
79
80
|
end
|
80
81
|
|
81
82
|
it "should get primary key from database at first time" do
|
@@ -137,6 +138,7 @@ describe "OracleEnhancedAdapter" do
|
|
137
138
|
@conn.execute "DROP DATABASE LINK #{@db_link}" rescue nil
|
138
139
|
@sys_conn.drop_table :test_posts, if_exists: true
|
139
140
|
Object.send(:remove_const, "TestPost") rescue nil
|
141
|
+
@conn.clear_table_columns_cache(:test_posts)
|
140
142
|
ActiveRecord::Base.clear_cache!
|
141
143
|
end
|
142
144
|
|
@@ -532,7 +534,7 @@ describe "OracleEnhancedAdapter" do
|
|
532
534
|
it "should return array from indexes with bind usage" do
|
533
535
|
expect(@conn.indexes("TEST_POSTS").class).to eq Array
|
534
536
|
expect(@logger.logged(:debug).last).to match(/:owner/)
|
535
|
-
expect(@logger.logged(:debug).last).to match(/\[\["owner", "#{DATABASE_USER.upcase}"\], \["owner", "#{DATABASE_USER.upcase}"\]\]/)
|
537
|
+
expect(@logger.logged(:debug).last).to match(/\[\["owner", "#{DATABASE_USER.upcase}"\], \["owner", "#{DATABASE_USER.upcase}"\], \["table_name", "TEST_POSTS"\]\]/)
|
536
538
|
end
|
537
539
|
|
538
540
|
it "should not have primary key trigger with bind usage" 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: 5.2.
|
4
|
+
version: 5.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raimonds Simanovskis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -139,31 +139,31 @@ signing_key:
|
|
139
139
|
specification_version: 4
|
140
140
|
summary: Oracle enhanced adapter for ActiveRecord
|
141
141
|
test_files:
|
142
|
-
- spec/
|
142
|
+
- spec/support/alter_system_set_open_cursors.sql
|
143
|
+
- spec/support/alter_system_user_password.sql
|
144
|
+
- spec/support/create_oracle_enhanced_users.sql
|
145
|
+
- spec/spec_config.yaml.template
|
143
146
|
- spec/active_record/connection_adapters/oracle_enhanced_data_types_spec.rb
|
147
|
+
- spec/active_record/connection_adapters/emulation/oracle_adapter_spec.rb
|
144
148
|
- spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb
|
145
|
-
- spec/active_record/connection_adapters/oracle_enhanced/
|
146
|
-
- spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb
|
149
|
+
- spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb
|
147
150
|
- spec/active_record/connection_adapters/oracle_enhanced/structure_dump_spec.rb
|
148
|
-
- spec/active_record/connection_adapters/oracle_enhanced/
|
149
|
-
- spec/active_record/connection_adapters/oracle_enhanced/
|
150
|
-
- spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb
|
151
|
+
- spec/active_record/connection_adapters/oracle_enhanced/schema_dumper_spec.rb
|
152
|
+
- spec/active_record/connection_adapters/oracle_enhanced/database_tasks_spec.rb
|
151
153
|
- spec/active_record/connection_adapters/oracle_enhanced/schema_statements_spec.rb
|
154
|
+
- spec/active_record/connection_adapters/oracle_enhanced/procedures_spec.rb
|
155
|
+
- spec/active_record/connection_adapters/oracle_enhanced/context_index_spec.rb
|
156
|
+
- spec/active_record/connection_adapters/oracle_enhanced/quoting_spec.rb
|
152
157
|
- spec/active_record/connection_adapters/oracle_enhanced/connection_spec.rb
|
153
|
-
- spec/active_record/connection_adapters/oracle_enhanced/dbms_output_spec.rb
|
154
|
-
- spec/active_record/oracle_enhanced/type/integer_spec.rb
|
155
|
-
- spec/active_record/oracle_enhanced/type/national_character_text_spec.rb
|
156
158
|
- spec/active_record/oracle_enhanced/type/timestamp_spec.rb
|
159
|
+
- spec/active_record/oracle_enhanced/type/boolean_spec.rb
|
160
|
+
- spec/active_record/oracle_enhanced/type/float_spec.rb
|
157
161
|
- spec/active_record/oracle_enhanced/type/binary_spec.rb
|
158
162
|
- spec/active_record/oracle_enhanced/type/national_character_string_spec.rb
|
163
|
+
- spec/active_record/oracle_enhanced/type/integer_spec.rb
|
159
164
|
- spec/active_record/oracle_enhanced/type/raw_spec.rb
|
160
|
-
- spec/active_record/oracle_enhanced/type/float_spec.rb
|
161
|
-
- spec/active_record/oracle_enhanced/type/dirty_spec.rb
|
162
165
|
- spec/active_record/oracle_enhanced/type/json_spec.rb
|
166
|
+
- spec/active_record/oracle_enhanced/type/national_character_text_spec.rb
|
167
|
+
- spec/active_record/oracle_enhanced/type/dirty_spec.rb
|
163
168
|
- spec/active_record/oracle_enhanced/type/text_spec.rb
|
164
|
-
- spec/active_record/oracle_enhanced/type/boolean_spec.rb
|
165
|
-
- spec/spec_config.yaml.template
|
166
169
|
- spec/spec_helper.rb
|
167
|
-
- spec/support/create_oracle_enhanced_users.sql
|
168
|
-
- spec/support/alter_system_user_password.sql
|
169
|
-
- spec/support/alter_system_set_open_cursors.sql
|