activerecord-oracle_enhanced-adapter 1.7.3 → 1.7.4
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/Gemfile +2 -2
- data/History.md +22 -0
- data/README.md +24 -0
- data/RUNNING_TESTS.md +34 -1
- data/VERSION +1 -1
- data/activerecord-oracle_enhanced-adapter.gemspec +3 -3
- data/lib/active_record/connection_adapters/oracle_enhanced/schema_statements.rb +2 -2
- data/lib/active_record/connection_adapters/oracle_enhanced_adapter.rb +3 -3
- data/spec/active_record/connection_adapters/oracle_enhanced_adapter_spec.rb +53 -10
- data/spec/active_record/connection_adapters/oracle_enhanced_schema_statements_spec.rb +6 -0
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 124c0346c9616607a37e143f3cd4dcbd8a6413d5
|
|
4
|
+
data.tar.gz: 23188503c1dcf33c756b3f2d9eff3e858505b21b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7f87365212531e4c7e038977482a7a879dd105711444b690881856f1a85485c2d8654d21235045b6bf455bd6199db1d90ac89d55239c1cdc0b4e39461c4198aa
|
|
7
|
+
data.tar.gz: ceaad6ba9776513ad0faaf760eb7c9fde8f0d0ff0db712f93bbe989437c183688eaecc9d453d1d91d2b59345320e395854aea07b0ab13db6e899af8aaaf70846
|
data/Gemfile
CHANGED
|
@@ -2,12 +2,12 @@ source 'http://rubygems.org'
|
|
|
2
2
|
|
|
3
3
|
group :development do
|
|
4
4
|
gem 'rspec', '~> 3.3'
|
|
5
|
-
gem 'rdoc'
|
|
5
|
+
gem 'rdoc', '~> 5.0.0.beta2'
|
|
6
6
|
gem 'rake'
|
|
7
7
|
|
|
8
8
|
gem 'activerecord', github: 'rails/rails', branch: '5-0-stable'
|
|
9
9
|
gem 'rack', github: 'rack/rack', branch: 'master'
|
|
10
|
-
gem 'arel', github: 'rails/arel', branch: '
|
|
10
|
+
gem 'arel', github: 'rails/arel', branch: '7-1-stable'
|
|
11
11
|
|
|
12
12
|
gem 'ruby-plsql', '>=0.5.0'
|
|
13
13
|
|
data/History.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## 1.7.4 / 2016-10-14
|
|
2
|
+
|
|
3
|
+
* Changes and bug fixes
|
|
4
|
+
|
|
5
|
+
* Bump Arel 7.1.4 or higher [#1010, #848, #946]
|
|
6
|
+
* NoMethodError: undefined method `write' for nil:NilClass for serialized column [#798, #1007]
|
|
7
|
+
* Quote table name in disable_referential_integrity [#1012, #1014]
|
|
8
|
+
* Rails 5 : undefined method `to_i' for #<Arel::Nodes::BindParam:0x00000002c92910> [#848, rails/arel#438, rails/arel#450]
|
|
9
|
+
* Add UPGRADE section : Upgrade Rails 4.2 or older version to Rails 5 [#1011, #993]
|
|
10
|
+
* add docker to RUNNING_TEST.md [#1006]
|
|
11
|
+
* Add executable test cases using Minitest or RSpec [#1002]
|
|
12
|
+
|
|
13
|
+
* Known issues
|
|
14
|
+
|
|
15
|
+
- Only with JRuby
|
|
16
|
+
* Rails 5 : explain should explain query with binds got Java::JavaSql::SQLException: Invalid column index [#908]
|
|
17
|
+
* Workaround: execute explain without bind or use CRuby
|
|
18
|
+
- CRuby and JRuby
|
|
19
|
+
* Rails 5 : custom methods for create record when exception is raised in after_create callback fails [#944]
|
|
20
|
+
* Rails 5 : specs need update to emulate_booleans_from_strings [#942]
|
|
21
|
+
* #998 causes regression for `TIMESTAMP WITH LOCAL TIME ZONE` [#1001]
|
|
22
|
+
|
|
1
23
|
## 1.7.3 / 2016-10-03
|
|
2
24
|
|
|
3
25
|
* Changes and bug fixes
|
data/README.md
CHANGED
|
@@ -619,6 +619,30 @@ development:
|
|
|
619
619
|
)"
|
|
620
620
|
```
|
|
621
621
|
|
|
622
|
+
UPGRADE
|
|
623
|
+
---------------
|
|
624
|
+
### Upgrade Rails 4.2 or older version to Rails 5
|
|
625
|
+
|
|
626
|
+
If your Oracle table columns have been created for Rails `:datetime` attributes in Rails 4.2 or earlier,
|
|
627
|
+
they need to migrate to `:datetime` in Rails 5 using one of two following ways:
|
|
628
|
+
|
|
629
|
+
* Rails migration code example:
|
|
630
|
+
```ruby
|
|
631
|
+
change_column :posts, :created_at, :datetime
|
|
632
|
+
change_column :posts, :updated_at, :datetime
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
or
|
|
636
|
+
|
|
637
|
+
* SQL statement example
|
|
638
|
+
```sql
|
|
639
|
+
ALTER TABLE "POSTS" MODIFY "CREATED_AT" TIMESTAMP
|
|
640
|
+
ALTER TABLE "POSTS" MODIFY "UPDATED_AT" TIMESTAMP
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
In Rails 5 without running this migration or sql statement,
|
|
644
|
+
these attributes will be handled as Rails `:date` type.
|
|
645
|
+
|
|
622
646
|
TROUBLESHOOTING
|
|
623
647
|
---------------
|
|
624
648
|
|
data/RUNNING_TESTS.md
CHANGED
|
@@ -13,6 +13,39 @@ If you are getting ORA-12520 errors when running tests then it means that Oracle
|
|
|
13
13
|
|
|
14
14
|
to increase process limit and then restart the database (this will be necessary if Oracle XE will be used as default processes limit is 40).
|
|
15
15
|
|
|
16
|
+
### Docker
|
|
17
|
+
If no Oracle database with SYS and SYSTEM user access is available, try the docker approach.
|
|
18
|
+
|
|
19
|
+
Install [Docker](https://docker.github.io/engine/installation/)
|
|
20
|
+
|
|
21
|
+
Pull [docker-oracle-xe-11g](https://hub.docker.com/r/wnameless/oracle-xe-11g/) image from docker hub
|
|
22
|
+
|
|
23
|
+
docker pull wnameless/oracle-xe-11g
|
|
24
|
+
|
|
25
|
+
Start a Oracle database docker container with mapped ports. Use port `49161` to access the database.
|
|
26
|
+
|
|
27
|
+
docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g
|
|
28
|
+
|
|
29
|
+
Check connection to the database with `sqlplus`. The user is `system`, the password is `oracle`.
|
|
30
|
+
|
|
31
|
+
sqlplus64 system/oracle@localhost:49161
|
|
32
|
+
|
|
33
|
+
The oracle enhanced configuration file `spec/spec_config.yaml` should look like:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
# copy this file to spec/config.yaml and set appropriate values
|
|
37
|
+
# you can also use environment variables, see spec_helper.rb
|
|
38
|
+
database:
|
|
39
|
+
name: 'xe'
|
|
40
|
+
host: 'localhost'
|
|
41
|
+
port: 49161
|
|
42
|
+
user: 'oracle_enhanced'
|
|
43
|
+
password: 'oracle_enhanced'
|
|
44
|
+
sys_password: 'oracle'
|
|
45
|
+
non_default_tablespace: 'SYSTEM'
|
|
46
|
+
timezone: 'Europe/Riga'
|
|
47
|
+
```
|
|
48
|
+
|
|
16
49
|
Ruby versions
|
|
17
50
|
-------------
|
|
18
51
|
|
|
@@ -40,7 +73,7 @@ Running tests
|
|
|
40
73
|
* Install necessary gems with
|
|
41
74
|
|
|
42
75
|
bundle install
|
|
43
|
-
|
|
76
|
+
|
|
44
77
|
* Configure database credentials in one of two ways:
|
|
45
78
|
* copy spec/spec_config.yaml.template to spec/config.yaml and modify as needed
|
|
46
79
|
* set required environment variables (see DATABASE_NAME in spec_helper.rb)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.7.
|
|
1
|
+
1.7.4
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = %q{activerecord-oracle_enhanced-adapter}
|
|
3
|
-
s.version = "1.7.
|
|
3
|
+
s.version = "1.7.4"
|
|
4
4
|
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
6
6
|
s.required_ruby_version = '>= 2.2.2'
|
|
7
7
|
s.license = 'MIT'
|
|
8
8
|
s.authors = [%q{Raimonds Simanovskis}]
|
|
9
|
-
s.date = %q{2016-10-
|
|
9
|
+
s.date = %q{2016-10-14}
|
|
10
10
|
s.description = %q{Oracle "enhanced" ActiveRecord adapter contains useful additional methods for working with new and legacy Oracle databases.
|
|
11
11
|
This adapter is superset of original ActiveRecord Oracle adapter.
|
|
12
12
|
}
|
|
@@ -88,7 +88,7 @@ This adapter is superset of original ActiveRecord Oracle adapter.
|
|
|
88
88
|
"spec/spec_helper.rb"
|
|
89
89
|
]
|
|
90
90
|
s.add_runtime_dependency(%q<activerecord>, ["~> 5.0.0"])
|
|
91
|
-
s.add_runtime_dependency(%q<arel>, ["~> 7.1.
|
|
91
|
+
s.add_runtime_dependency(%q<arel>, ["~> 7.1.4"])
|
|
92
92
|
s.add_runtime_dependency(%q<ruby-plsql>, [">= 0.5.0"])
|
|
93
93
|
s.license = 'MIT'
|
|
94
94
|
end
|
|
@@ -434,12 +434,12 @@ module ActiveRecord
|
|
|
434
434
|
old_constraints = select_all(sql_constraints)
|
|
435
435
|
begin
|
|
436
436
|
old_constraints.each do |constraint|
|
|
437
|
-
execute "ALTER TABLE #{constraint["table_name"]} DISABLE CONSTRAINT #{constraint["constraint_name"]}"
|
|
437
|
+
execute "ALTER TABLE #{quote_table_name(constraint["table_name"])} DISABLE CONSTRAINT #{quote_table_name(constraint["constraint_name"])}"
|
|
438
438
|
end
|
|
439
439
|
yield
|
|
440
440
|
ensure
|
|
441
441
|
old_constraints.each do |constraint|
|
|
442
|
-
execute "ALTER TABLE #{constraint["table_name"]} ENABLE CONSTRAINT #{constraint["constraint_name"]}"
|
|
442
|
+
execute "ALTER TABLE #{quote_table_name(constraint["table_name"])} ENABLE CONSTRAINT #{quote_table_name(constraint["constraint_name"])}"
|
|
443
443
|
end
|
|
444
444
|
end
|
|
445
445
|
end
|
|
@@ -700,7 +700,7 @@ module ActiveRecord
|
|
|
700
700
|
columns.each do |col|
|
|
701
701
|
value = attributes[col.name]
|
|
702
702
|
# changed sequence of next two lines - should check if value is nil before converting to yaml
|
|
703
|
-
next if value.
|
|
703
|
+
next if value.blank?
|
|
704
704
|
if klass.attribute_types[col.name].is_a? ActiveRecord::Type::Serialized
|
|
705
705
|
value = klass.attribute_types[col.name].serialize(value)
|
|
706
706
|
end
|
|
@@ -960,8 +960,8 @@ module ActiveRecord
|
|
|
960
960
|
@@do_not_prefetch_primary_key[table_name] = nil
|
|
961
961
|
|
|
962
962
|
table_cols = <<-SQL.strip.gsub(/\s+/, ' ')
|
|
963
|
-
SELECT cols.column_name AS name, cols.data_type AS sql_type,
|
|
964
|
-
cols.data_default, cols.nullable, cols.virtual_column, cols.hidden_column,
|
|
963
|
+
SELECT cols.column_name AS name, cols.data_type AS sql_type,
|
|
964
|
+
cols.data_default, cols.nullable, cols.virtual_column, cols.hidden_column,
|
|
965
965
|
cols.data_type_owner AS sql_type_owner,
|
|
966
966
|
DECODE(cols.data_type, 'NUMBER', data_precision,
|
|
967
967
|
'FLOAT', data_precision,
|
|
@@ -30,7 +30,7 @@ describe "OracleEnhancedAdapter establish connection" do
|
|
|
30
30
|
ActiveRecord::Base.connection.reconnect!
|
|
31
31
|
expect(ActiveRecord::Base.connection).to be_active
|
|
32
32
|
end
|
|
33
|
-
|
|
33
|
+
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
describe "OracleEnhancedAdapter" do
|
|
@@ -40,7 +40,7 @@ describe "OracleEnhancedAdapter" do
|
|
|
40
40
|
before(:all) do
|
|
41
41
|
ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
|
|
42
42
|
end
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
describe "ignore specified table columns" do
|
|
45
45
|
before(:all) do
|
|
46
46
|
@conn = ActiveRecord::Base.connection
|
|
@@ -377,19 +377,19 @@ describe "OracleEnhancedAdapter" do
|
|
|
377
377
|
expect(@adapter.valid_table_name?("aBc")).to be_falsey
|
|
378
378
|
expect(@adapter.valid_table_name?("abC")).to be_falsey
|
|
379
379
|
end
|
|
380
|
-
|
|
380
|
+
|
|
381
381
|
it "should not be valid for names > 30 characters" do
|
|
382
382
|
expect(@adapter.valid_table_name?("a" * 31)).to be_falsey
|
|
383
383
|
end
|
|
384
|
-
|
|
384
|
+
|
|
385
385
|
it "should not be valid for schema names > 30 characters" do
|
|
386
386
|
expect(@adapter.valid_table_name?(("a" * 31) + ".validname")).to be_falsey
|
|
387
387
|
end
|
|
388
|
-
|
|
388
|
+
|
|
389
389
|
it "should not be valid for database links > 128 characters" do
|
|
390
390
|
expect(@adapter.valid_table_name?("name@" + "a" * 129)).to be_falsey
|
|
391
391
|
end
|
|
392
|
-
|
|
392
|
+
|
|
393
393
|
it "should not be valid for names that do not begin with alphabetic characters" do
|
|
394
394
|
expect(@adapter.valid_table_name?("1abc")).to be_falsey
|
|
395
395
|
expect(@adapter.valid_table_name?("_abc")).to be_falsey
|
|
@@ -457,7 +457,7 @@ describe "OracleEnhancedAdapter" do
|
|
|
457
457
|
|
|
458
458
|
cc = CamelCase.create!(:name => "Foo", :foo => 2)
|
|
459
459
|
expect(cc.id).not_to be_nil
|
|
460
|
-
|
|
460
|
+
|
|
461
461
|
expect(@conn.tables).to include("CamelCase")
|
|
462
462
|
end
|
|
463
463
|
|
|
@@ -719,8 +719,6 @@ describe "OracleEnhancedAdapter" do
|
|
|
719
719
|
@employee.create!(sort_order: i+=1, first_name: 'Steven', last_name: 'Rogers')
|
|
720
720
|
@employee.create!(sort_order: i+=1, first_name: 'Bruce', last_name: 'Banner')
|
|
721
721
|
@employee.create!(sort_order: i+=1, first_name: 'Natasha', last_name: 'Romanova')
|
|
722
|
-
@oracle11g_or_lower = !! @conn.select_value(
|
|
723
|
-
"select * from product_component_version where product like 'Oracle%' and to_number(substr(version,1,2)) <= 11")
|
|
724
722
|
end
|
|
725
723
|
|
|
726
724
|
after(:all) do
|
|
@@ -742,7 +740,6 @@ describe "OracleEnhancedAdapter" do
|
|
|
742
740
|
end
|
|
743
741
|
|
|
744
742
|
it "should return the records starting from offset n with offset(n)" do
|
|
745
|
-
skip "Skipped until #848 or rails/arel#438 resolved " if @oracle11g_or_lower
|
|
746
743
|
expect(@employee.order(:sort_order).first.first_name).to eq("Peter")
|
|
747
744
|
expect(@employee.order(:sort_order).offset(0).first.first_name).to eq("Peter")
|
|
748
745
|
expect(@employee.order(:sort_order).offset(1).first.first_name).to eq("Tony")
|
|
@@ -773,4 +770,50 @@ describe "OracleEnhancedAdapter" do
|
|
|
773
770
|
expect(@conn.valid_type?(:foobar)).to be false
|
|
774
771
|
end
|
|
775
772
|
end
|
|
773
|
+
|
|
774
|
+
describe 'serialized column' do
|
|
775
|
+
before(:all) do
|
|
776
|
+
schema_define do
|
|
777
|
+
create_table :test_serialized_columns do |t|
|
|
778
|
+
t.text :serialized
|
|
779
|
+
end
|
|
780
|
+
end
|
|
781
|
+
class ::TestSerializedColumn < ActiveRecord::Base
|
|
782
|
+
serialize :serialized, Array
|
|
783
|
+
end
|
|
784
|
+
end
|
|
785
|
+
|
|
786
|
+
after(:all) do
|
|
787
|
+
schema_define do
|
|
788
|
+
drop_table :test_serialized_columns
|
|
789
|
+
end
|
|
790
|
+
Object.send(:remove_const, 'TestSerializedColumn')
|
|
791
|
+
ActiveRecord::Base.table_name_prefix = nil
|
|
792
|
+
ActiveRecord::Base.clear_cache! if ActiveRecord::Base.respond_to?(:"clear_cache!")
|
|
793
|
+
end
|
|
794
|
+
|
|
795
|
+
before(:each) do
|
|
796
|
+
set_logger
|
|
797
|
+
end
|
|
798
|
+
|
|
799
|
+
after(:each) do
|
|
800
|
+
clear_logger
|
|
801
|
+
end
|
|
802
|
+
|
|
803
|
+
it 'should serialize' do
|
|
804
|
+
new_value = 'new_value'
|
|
805
|
+
serialized_column = TestSerializedColumn.new
|
|
806
|
+
|
|
807
|
+
expect(serialized_column.serialized).to eq([])
|
|
808
|
+
serialized_column.serialized << new_value
|
|
809
|
+
expect(serialized_column.serialized).to eq([new_value])
|
|
810
|
+
serialized_column.save
|
|
811
|
+
expect(serialized_column.save!).to eq(true)
|
|
812
|
+
|
|
813
|
+
serialized_column.reload
|
|
814
|
+
expect(serialized_column.serialized).to eq([new_value])
|
|
815
|
+
serialized_column.serialized = []
|
|
816
|
+
expect(serialized_column.save!).to eq(true)
|
|
817
|
+
end
|
|
818
|
+
end
|
|
776
819
|
end
|
|
@@ -917,11 +917,16 @@ end
|
|
|
917
917
|
t.string :body, :limit => 4000
|
|
918
918
|
t.references :test_post, :foreign_key => true
|
|
919
919
|
end
|
|
920
|
+
create_table "test_Mixed_Comments", :force => true do |t|
|
|
921
|
+
t.string :body, :limit => 4000
|
|
922
|
+
t.references :test_post, :foreign_key => true
|
|
923
|
+
end
|
|
920
924
|
end
|
|
921
925
|
end
|
|
922
926
|
|
|
923
927
|
after(:each) do
|
|
924
928
|
schema_define do
|
|
929
|
+
drop_table "test_Mixed_Comments" rescue nil
|
|
925
930
|
drop_table :test_comments rescue nil
|
|
926
931
|
drop_table :test_posts rescue nil
|
|
927
932
|
end
|
|
@@ -933,6 +938,7 @@ end
|
|
|
933
938
|
end.to raise_error(ActiveRecord::InvalidForeignKey)
|
|
934
939
|
@conn.disable_referential_integrity do
|
|
935
940
|
expect do
|
|
941
|
+
@conn.execute "INSERT INTO \"test_Mixed_Comments\" (id, body, test_post_id) VALUES (2, 'test', 2)"
|
|
936
942
|
@conn.execute "INSERT INTO test_comments (id, body, test_post_id) VALUES (2, 'test', 2)"
|
|
937
943
|
@conn.execute "INSERT INTO test_posts (id, title) VALUES (2, 'test')"
|
|
938
944
|
end.not_to raise_error
|
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: 1.7.
|
|
4
|
+
version: 1.7.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Raimonds Simanovskis
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-10-
|
|
11
|
+
date: 2016-10-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -30,14 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 7.1.
|
|
33
|
+
version: 7.1.4
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 7.1.
|
|
40
|
+
version: 7.1.4
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: ruby-plsql
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
133
133
|
version: '0'
|
|
134
134
|
requirements: []
|
|
135
135
|
rubyforge_project:
|
|
136
|
-
rubygems_version: 2.
|
|
136
|
+
rubygems_version: 2.6.6
|
|
137
137
|
signing_key:
|
|
138
138
|
specification_version: 4
|
|
139
139
|
summary: Oracle enhanced adapter for ActiveRecord
|