scenic-oracle_adapter 1.3.5 → 1.5.0
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/CHANGELOG.md +10 -0
- data/Dockerfile +1 -1
- data/Gemfile +1 -1
- data/lib/scenic/adapters/oracle/railtie.rb +13 -5
- data/lib/scenic/adapters/oracle/view.rb +36 -0
- data/lib/scenic/adapters/oracle.rb +26 -7
- data/lib/scenic/oracle_adapter/version.rb +1 -1
- data/lib/scenic/oracle_adapter.rb +3 -0
- data/scenic-oracle_adapter.gemspec +1 -2
- metadata +6 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '05291434dbbe227f36a68f3a95c72abc3b7ef75021682fd8c3eced9079d72da1'
|
4
|
+
data.tar.gz: c733e61877f321648aa4deb15240322fff153373946c8e6c7bafacd9151c6c12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2475872a9d0ecff9cb58229b11a9d60425498471f2397646cfd27b90a2ae5b6dac06a9817430cbd6183187fb9dbde0689121e5c2bfe36c2e317cb01ffe8cb574
|
7
|
+
data.tar.gz: e2fdaa37cfd438776f60a6c43f936cc52ee7710e9c5459fcbb14c7bc4e363190421092ec7a34115c3fcae1ab14d2229228ec12d218b86e1883683dec12bf4d6f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## v1.5.0 - October 8, 2025
|
4
|
+
|
5
|
+
- Inlcude `no_data` information to materialized view definitions in schema.rb
|
6
|
+
|
7
|
+
## v1.4.0 - June 30, 2025
|
8
|
+
|
9
|
+
- Use scenic 1.9.0
|
10
|
+
- Reduce churn in schema.rb by topologically sorting dumped views
|
11
|
+
- Raise SideBySideNotSupportedError when Scenic's side_by_side mode is attempted
|
12
|
+
|
3
13
|
## v1.3.5 - Oct 9, 2024
|
4
14
|
|
5
15
|
- Silence ActiveRecord output while running specs. Clean green dots! (@eeklund, @dlagerro)
|
data/Dockerfile
CHANGED
data/Gemfile
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "rails/railtie"
|
4
|
-
require "active_record/connection_adapters/oracle_enhanced_adapter"
|
5
4
|
|
6
5
|
module Scenic
|
7
6
|
module Adapters
|
8
7
|
class Oracle
|
9
8
|
class Railtie < Rails::Railtie
|
10
9
|
ActiveSupport.on_load(:active_record) do
|
11
|
-
if
|
12
|
-
|
13
|
-
|
14
|
-
ActiveRecord::ConnectionAdapters::
|
10
|
+
if Scenic::Adapters::Oracle.uses_oracle_enhanced_adapter?
|
11
|
+
require "active_record/connection_adapters/oracle_enhanced_adapter"
|
12
|
+
|
13
|
+
if defined?(ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper)
|
14
|
+
ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaDumper.prepend Scenic::SchemaDumper
|
15
|
+
else
|
16
|
+
ActiveRecord::ConnectionAdapters::OracleEnhanced::SchemaDumper.prepend Scenic::SchemaDumper
|
17
|
+
end
|
18
|
+
end
|
19
|
+
if Scenic::Adapters::Oracle.uses_oracle_adapter?
|
20
|
+
require "active_record/connection_adapters/oracle_adapter"
|
21
|
+
|
22
|
+
ActiveRecord::ConnectionAdapters::Oracle::SchemaDumper.prepend Scenic::SchemaDumper
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "scenic/view"
|
4
|
+
|
5
|
+
module Scenic
|
6
|
+
module Adapters
|
7
|
+
class Oracle
|
8
|
+
class View < Scenic::View
|
9
|
+
attr_reader :no_data
|
10
|
+
|
11
|
+
def initialize(name:, definition:, materialized:, no_data: false)
|
12
|
+
super(name: name, definition: definition, materialized: materialized)
|
13
|
+
@no_data = no_data
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_schema
|
17
|
+
materialized_option = if materialized
|
18
|
+
if no_data
|
19
|
+
"materialized: { no_data: true } , "
|
20
|
+
else
|
21
|
+
"materialized: true, "
|
22
|
+
end
|
23
|
+
else
|
24
|
+
""
|
25
|
+
end
|
26
|
+
|
27
|
+
<<-DEFINITION
|
28
|
+
create_view #{UnaffixedName.for(name).inspect}, #{materialized_option}sql_definition: <<-\SQL
|
29
|
+
#{escaped_definition.indent(2)}
|
30
|
+
SQL
|
31
|
+
DEFINITION
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -3,12 +3,15 @@
|
|
3
3
|
require_relative "oracle/index_reapplication"
|
4
4
|
require_relative "oracle/indexes"
|
5
5
|
require_relative "oracle/refresh_dependencies"
|
6
|
+
require_relative "oracle/view"
|
6
7
|
require "active_support/core_ext/string/strip"
|
7
8
|
require "tsortable_hash"
|
8
9
|
|
9
10
|
module Scenic
|
10
11
|
module Adapters
|
11
12
|
class Oracle
|
13
|
+
class SideBySideNotSupportedError < StandardError; end
|
14
|
+
|
12
15
|
def initialize(connectable = ActiveRecord::Base)
|
13
16
|
@connectable = connectable
|
14
17
|
end
|
@@ -38,10 +41,14 @@ module Scenic
|
|
38
41
|
execute("create materialized view #{quote_table_name(name)} #{'build deferred' if no_data} as #{trimmed_definition(definition)}")
|
39
42
|
end
|
40
43
|
|
41
|
-
def update_materialized_view(name, definition, no_data: false)
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
def update_materialized_view(name, definition, no_data: false, side_by_side: false)
|
45
|
+
if side_by_side
|
46
|
+
raise SideBySideNotSupportedError.new("Renaming materialized view is not supported in Oracle")
|
47
|
+
else
|
48
|
+
IndexReapplication.new(connection: connection).on(name) do
|
49
|
+
drop_materialized_view(name)
|
50
|
+
create_materialized_view(name, definition, no_data: no_data)
|
51
|
+
end
|
45
52
|
end
|
46
53
|
end
|
47
54
|
|
@@ -67,6 +74,18 @@ module Scenic
|
|
67
74
|
delegate :connection, to: :@connectable
|
68
75
|
delegate :select_all, :select_value, :execute, :quote_table_name, to: :connection
|
69
76
|
|
77
|
+
def self.file_exists_in_load_path?(filename)
|
78
|
+
$LOAD_PATH.any? { |path| File.exist?(File.join(path, filename)) }
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.uses_oracle_enhanced_adapter?
|
82
|
+
file_exists_in_load_path?("active_record/connection_adapters/oracle_enhanced_adapter.rb")
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.uses_oracle_adapter?
|
86
|
+
file_exists_in_load_path?("active_record/connection_adapters/oracle_adapter.rb")
|
87
|
+
end
|
88
|
+
|
70
89
|
private
|
71
90
|
|
72
91
|
def view_dependencies
|
@@ -120,13 +139,13 @@ module Scenic
|
|
120
139
|
|
121
140
|
def all_views
|
122
141
|
select_all("select lower(view_name) name, text definition from user_views").map do |view|
|
123
|
-
Scenic::View.new(name: view["name"], definition: view["definition"], materialized: false)
|
142
|
+
Scenic::Adapters::Oracle::View.new(name: view["name"], definition: view["definition"], materialized: false)
|
124
143
|
end
|
125
144
|
end
|
126
145
|
|
127
146
|
def all_mviews
|
128
|
-
select_all("select lower(mview_name) as name, query as definition from user_mviews").map do |view|
|
129
|
-
Scenic::View.new(name: view["name"], definition: view["definition"], materialized: true)
|
147
|
+
select_all("select lower(mview_name) as name, query as definition, build_mode from user_mviews").map do |view|
|
148
|
+
Scenic::Adapters::Oracle::View.new(name: view["name"], definition: view["definition"], materialized: true, no_data: view["build_mode"] == "DEFERRED")
|
130
149
|
end
|
131
150
|
end
|
132
151
|
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_record"
|
4
|
+
# Require tsort here before scenic to avoid:
|
5
|
+
# uninitialized constant Scenic::Adapters::Postgres::Views::TSortableHash::TSort
|
6
|
+
require "tsort"
|
4
7
|
require "scenic"
|
5
8
|
require "scenic/oracle_adapter/version"
|
6
9
|
require "scenic/adapters/oracle"
|
@@ -22,8 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ["lib"]
|
24
24
|
|
25
|
-
spec.add_dependency "scenic", "= 1.
|
26
|
-
spec.add_dependency "activerecord-oracle_enhanced-adapter", ">= 1.5.0"
|
25
|
+
spec.add_dependency "scenic", "= 1.9.0"
|
27
26
|
|
28
27
|
spec.add_development_dependency "bundler", "~> 2.0"
|
29
28
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scenic-oracle_adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Dinger
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: scenic
|
@@ -16,28 +15,14 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - '='
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
18
|
+
version: 1.9.0
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - '='
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activerecord-oracle_enhanced-adapter
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.5.0
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.5.0
|
25
|
+
version: 1.9.0
|
41
26
|
- !ruby/object:Gem::Dependency
|
42
27
|
name: bundler
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,7 +93,6 @@ dependencies:
|
|
108
93
|
- - "~>"
|
109
94
|
- !ruby/object:Gem::Version
|
110
95
|
version: '2.2'
|
111
|
-
description:
|
112
96
|
email:
|
113
97
|
- chris@houseofding.com
|
114
98
|
executables: []
|
@@ -136,6 +120,7 @@ files:
|
|
136
120
|
- lib/scenic/adapters/oracle/indexes.rb
|
137
121
|
- lib/scenic/adapters/oracle/railtie.rb
|
138
122
|
- lib/scenic/adapters/oracle/refresh_dependencies.rb
|
123
|
+
- lib/scenic/adapters/oracle/view.rb
|
139
124
|
- lib/scenic/oracle_adapter.rb
|
140
125
|
- lib/scenic/oracle_adapter/version.rb
|
141
126
|
- lib/tsortable_hash.rb
|
@@ -144,7 +129,6 @@ homepage: https://github.com/cdinger/scenic-oracle_adapter
|
|
144
129
|
licenses:
|
145
130
|
- MIT
|
146
131
|
metadata: {}
|
147
|
-
post_install_message:
|
148
132
|
rdoc_options: []
|
149
133
|
require_paths:
|
150
134
|
- lib
|
@@ -159,8 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
143
|
- !ruby/object:Gem::Version
|
160
144
|
version: '0'
|
161
145
|
requirements: []
|
162
|
-
rubygems_version: 3.
|
163
|
-
signing_key:
|
146
|
+
rubygems_version: 3.6.9
|
164
147
|
specification_version: 4
|
165
148
|
summary: Oracle adapter for thoughtbot/scenic
|
166
149
|
test_files: []
|